Codeforces 615D Multipliers (数论)
题目链接 Multipliers
题意很明确。
很显然答案可以表示成X ^ EXP % MOD
首先我们令N为输入的n个数的乘积。并且设N = (P1 ^ C1) * (P2 ^ C2) * ... * (Pk * Ck),Pi(1 <= i <= k)为质数。
1、N为完全平方数。
这个时候X = N的算术平方根,EXP = (C1 +1) * (C2 + 1) * ... * (Ck + 1), MOD = 1e9 + 7;
2、N不是完全平方数。
这个时候X = N, EXP = (C1 +1) * (C2 + 1) * ... * (Ck + 1) / 2, MOD = 1e9 + 7;
考虑到EXP可能非常大,这里我用了指数循环节公式:
a^b%c = a^( b%phic+phic )%c phix为欧拉函数。
而在题中c等于1e9 + 7为质数,那么phic = 1e9 + 6。
剩下的事情就很简单了。
#include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for(int i(a); i <= (b); ++i)
#define LL long long const int N = ;
const LL mod = ; int prime[N];
int c[N], d[N];
bool fl;
int cnt = ;
int n, x;
int squ; map <int, int> mp; inline LL Pow(LL a, LL b, LL Mod){
LL ret();
for (; b; b >>= , (a *= a) %= Mod)
if (b & ) (ret *= a) %= Mod;
return ret;
} int main(){ rep(i, , ){
fl = true;
rep(j, , (int)sqrt(i + 0.5)) if (i % j == ){
fl = false;
break;
}
if (fl){
prime[++cnt] = i;
mp[prime[cnt]] = cnt;
}
} memset(c, , sizeof c); scanf("%d", &n);
rep(i, , n){
scanf("%d", &x);
++c[mp[x]];
} squ = ;
rep(i, , cnt)
if (c[i]){
if (c[i] & ){
squ = ;
break;
}
} LL exp = ;
if (squ){
LL ret = ;
rep(i, , cnt) d[i] = c[i] / ;
rep(i, , cnt) ++c[i];
rep(i, , cnt) (exp *= c[i]) %= (mod - ); rep(i, , cnt) if (d[i]) (ret *= Pow(prime[i], d[i], mod)) %= mod; printf("%lld\n", Pow(ret, exp + mod - , mod));
} else
{
rep(i, , cnt) d[i] = c[i] + ;
rep(i, , cnt) if (d[i] % == ){
d[i] >>= ;
break;
} LL exp = ;
rep(i, , cnt) (exp *= d[i]) %= (mod - );
LL ret = ;
rep(i, , cnt) if (c[i]) (ret *= Pow(prime[i], c[i], mod)) %= mod; printf("%lld\n", Pow(ret, exp + mod - , mod));
} return ; }
Codeforces 615D Multipliers (数论)的更多相关文章
- CodeForces - 615D Multipliers(数论)
http://codeforces.com/problemset/problem/615/D 题意 给出m个质因子,组成一个数n.问n的约数的乘积是多少,输出mod 1e+7的结果. 分析 从输入我们 ...
- codeforces 615D - Multipliers
Multipliers 题意:给定一个2e5范围内的整数m,之后输入m个2e5内的素数(当然可以重复了),问把这些输入的素数全部乘起来所得的数的约数的乘积mod(1e9+7)等于多少? 思路:对题目样 ...
- Codeforces Round #338 (Div. 2) D. Multipliers 数论
D. Multipliers 题目连接: http://codeforces.com/contest/615/problem/D Description Ayrat has number n, rep ...
- codeforces 615 D. Multipliers (数论 + 小费马定理 + 素数)
题目链接: codeforces 615 D. Multipliers 题目描述: 给出n个素数,这n个素数的乘积等于s,问p的所有因子相乘等于多少? 解题思路: 需要求出每一个素数的贡献值,设定在这 ...
- 【14.67%】【codeforces 615D】Multipliers
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- codeforces 735D Taxes(数论)
Maximal GCD 题目链接:http://codeforces.com/problemset/problem/735/D ——每天在线,欢迎留言谈论. 题目大意: 给你一个n(2≤n≤2e9) ...
- CF 615D Multipliers
题目:http://codeforces.com/contest/615/problem/D 求n的约数乘积. 设d(x)为x的约数个数,x=p1^a1+p2^a2+……+pn^an,f(x)为x的约 ...
- Codeforces 1106F(数论)
要点 998244353的原根g = 3,意味着对于任意\[1 <= x,y<p\]\[x\neq\ y\]\[g^x\%p\neq\ g^y\%p\]因此可以有构造序列\(q(a)与a一 ...
- Codeforces 858A. k-rounding 数论
题目: 题意:输入n和k,找到一个最小的数,满足末尾有至少k个0和是n的倍数. 最小的情况 ans = n,最大的情况 ans = n*pow(10,k). 令 k = pow(10,k); 我们发现 ...
随机推荐
- 菜鸟学Linux - Hard Link与Symbolic Link
在学习Hard Link与Symbolic Link之前,需要大概了解一下inode与data block.在Linux的文件系统中,一个文件对应一个inode与若干个data block.inode ...
- 2940: [Poi2000]条纹(Multi_SG)
2940: [Poi2000]条纹 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 114 Solved: 72[Submit][Status][Dis ...
- nginx 同一 iP 多域名配置方法(多文件)
一.Nginx 配置文件(nginx version: nginx/1.12.2) 路径:/usr/local/nginx/conf/nginx.conf 操作:在 http 模块增加(子配置文件的路 ...
- C# Params的应用
为了将方法声明为可以接受可变数量参数的方法,我们可以使用params关键字来声明数组,如下所示: public static Int32Add(params Int32[] values) { Int ...
- 13、jQueryMobile知识总结
1.jQueryMobile与jQuery的区别 jQueryMobile是一个为触控优化的框架,用于创建移动Web应用程序:构建于jQuery之上,适用于流行的智能手机和平板 基于jQuery的手机 ...
- 6、CSS基础 part-4
1.CSS 定位属性 CSS 定位属性允许你对元素进行定位. 属性 描述 position 把元素放置到一个静态的.相对的.绝对的.或固定的位置中. top 定义了一个定位元素的上外边距边界与其包含块 ...
- MongoDB快速入门学习笔记3 MongoDB的文档插入操作
1.文档的数据存储格式为BSON,类似于JSON.MongoDB插入数据时会检验数据中是否有“_id”,如果没有会自动生成.shell操作有insert和save两种方法.当插入一条数据有“_id”值 ...
- Kafka SSL 配置
#!/bin/bash # 生成服务器keystore(密钥和证书)keytool -keystore server.keystore.jks -alias machine03.zheng.com - ...
- dijkstra 堆优化
#include <iostream> #include <vector> #include <cstring> #include <queue> us ...
- 链表的问题,ListNode问题
算法面试,有关ListNode的问题 class ListNode{ ListNode *next; int val; ListNode(int x): val(x){}}; 在面试的时候,怎么快速想 ...