题目链接 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 (数论)的更多相关文章

  1. CodeForces - 615D Multipliers(数论)

    http://codeforces.com/problemset/problem/615/D 题意 给出m个质因子,组成一个数n.问n的约数的乘积是多少,输出mod 1e+7的结果. 分析 从输入我们 ...

  2. codeforces 615D - Multipliers

    Multipliers 题意:给定一个2e5范围内的整数m,之后输入m个2e5内的素数(当然可以重复了),问把这些输入的素数全部乘起来所得的数的约数的乘积mod(1e9+7)等于多少? 思路:对题目样 ...

  3. Codeforces Round #338 (Div. 2) D. Multipliers 数论

    D. Multipliers 题目连接: http://codeforces.com/contest/615/problem/D Description Ayrat has number n, rep ...

  4. codeforces 615 D. Multipliers (数论 + 小费马定理 + 素数)

    题目链接: codeforces 615 D. Multipliers 题目描述: 给出n个素数,这n个素数的乘积等于s,问p的所有因子相乘等于多少? 解题思路: 需要求出每一个素数的贡献值,设定在这 ...

  5. 【14.67%】【codeforces 615D】Multipliers

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  6. codeforces 735D Taxes(数论)

    Maximal GCD 题目链接:http://codeforces.com/problemset/problem/735/D ——每天在线,欢迎留言谈论. 题目大意: 给你一个n(2≤n≤2e9) ...

  7. CF 615D Multipliers

    题目:http://codeforces.com/contest/615/problem/D 求n的约数乘积. 设d(x)为x的约数个数,x=p1^a1+p2^a2+……+pn^an,f(x)为x的约 ...

  8. Codeforces 1106F(数论)

    要点 998244353的原根g = 3,意味着对于任意\[1 <= x,y<p\]\[x\neq\ y\]\[g^x\%p\neq\ g^y\%p\]因此可以有构造序列\(q(a)与a一 ...

  9. Codeforces 858A. k-rounding 数论

    题目: 题意:输入n和k,找到一个最小的数,满足末尾有至少k个0和是n的倍数. 最小的情况 ans = n,最大的情况 ans = n*pow(10,k). 令 k = pow(10,k); 我们发现 ...

随机推荐

  1. Codeforces Round #461 (Div. 2) D. Robot Vacuum Cleaner

    D. Robot Vacuum Cleaner time limit per test 1 second memory limit per test 256 megabytes Problem Des ...

  2. PAT乙级1088

    1088 三人行 (20 分) 子曰:“三人行,必有我师焉.择其善者而从之,其不善者而改之.” 本题给定甲.乙.丙三个人的能力值关系为:甲的能力值确定是 2 位正整数:把甲的能力值的 2 个数字调换位 ...

  3. Linux 用户行为日志记录

    工作中我们常常遇到,有的员工不安于被分配的权限,老是想sudo echo "ziji" /usr/bin/visudo NOPASSWD:ALL来进行提权,造成误删了数据库某条重要 ...

  4. 笔记-python-tutorial-5.data structure

    笔记-python-tutorial-5.data structure 1.      data structure 1.1.    list operation list.append(x) #尾部 ...

  5. Java面向对象---方法的创建与重载

    方法的创建 方法就是可重复调用的代码段. 定义: 访问修饰符 返回值类型 方法名(参数){ 方法主体 } 返回值类型:void(无返回值):基本数据类型:应用数据类型:类对象等. 方法名的命名规则:第 ...

  6. Beats、Filebea入门

    1. Filebeat配置简介 2. Filebeat收集nginx日志 3. packetbeat简介与演示

  7. StartWith 测试

    var clientConfiguration = GetConfiguration("couchbase.json"); ClusterHelper.Initialize(cli ...

  8. [转载]在Robotium中使用ID

    原文地址:在Robotium中使用ID作者:逍遥云翳 在Robotium的API中不提供使用ID的方式. 如果我们想在Robotium中使用ID就需要自己通过ID来找到控件的实例,然后通过Roboti ...

  9. PAT1028

    某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人. 这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过200岁的老人,而今天是2014年9月 ...

  10. 【转】 [Unity3D]手机3D游戏开发:场景切换与数据存储(PlayerPrefs 类的介绍与使用)

    http://blog.csdn.net/pleasecallmewhy/article/details/8543181 在Unity中的数据存储和iOS中字典的存储基本相同,是通过关键字实现数据存储 ...