time limit per test2 seconds

memory limit per test256 megabytes

inputstandard input

outputstandard output

Ayrat has number n, represented as it’s prime factorization pi of size m, i.e. n = p1·p2·…·pm. Ayrat got secret information that that the product of all divisors of n taken modulo 109 + 7 is the password to the secret data base. Now he wants to calculate this value.

Input

The first line of the input contains a single integer m (1 ≤ m ≤ 200 000) — the number of primes in factorization of n.

The second line contains m primes numbers pi (2 ≤ pi ≤ 200 000).

Output

Print one integer — the product of all divisors of n modulo 109 + 7.

Examples

input

2

2 3

output

36

input

3

2 3 2

output

1728

Note

In the first sample n = 2·3 = 6. The divisors of 6 are 1, 2, 3 and 6, their product is equal to 1·2·3·6 = 36.

In the second sample 2·3·2 = 12. The divisors of 12 are 1, 2, 3, 4, 6 and 12. 1·2·3·4·6·12 = 1728.

【题解】



数论问题;先搞出质数的总数a[0];存在a[1..a[0]]中;

用cnt[x]表示x这个数字的数目;

用l[n]表示∏(cnt[a[i]]+1);i=1..n

用r[n]表示∏(cnt[a[i]]+1);i=n..a[0];

则枚举每个数字a[i];

对于1..i-1和i+1..a[0]这些数字;

它们的组合有l[i-1]*r[i+1]个;

a[i]要参与到这些组合中;

那么最后会乘进去多少个a[i]呢;

显然a[i]^x就会乘进去x个a[i];



(a[i]^1)^(l[i-1]*1*r[i+1])

(a[i]^2)^(l[i-1]*2*r[i+1])

(a[i]^3)^(l[i-1]*3*r[i+1])



(a[i]^cnt[a[i]])^(l[i-1]*cnt[a[i]]*r[i+1])

最后会全部乘起来;

即a[i]^(l[i-1]r[i+1](1+2+3..+cnt[a[i]]))

即a[i]^(l[i-1]r[i+1]*cnt[a[i]](cnt[a[i]]+1)/2);

这个数字的指数是很恐怖的;

a[i]^(l[i-1]r[i+1]*cnt[a[i]](cnt[a[i]]+1)/2)

需要用费马小定理搞一搞;

下面是证明;

最上面那行是费马小定理;



这个费马小定理要求p和a是互质的;

而P是1e9+7是质数

a[i]最大20W小于P显然a[i]和p互质;则

a[i]^(l[i-1]r[i+1]*cnt[a[i]](cnt[a[i]]+1)/2) % p==a[i]^(l[i-1]r[i+1]*cnt[a[i]](cnt[a[i]]+1)/2%(p-1)) % p;

然后快速幂搞下就好;

#include <cstdio>
#include <cmath>
#include <set>
#include <map>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <queue>
#include <vector>
#include <stack>
#include <string>
#define lson L,m,rt<<1
#define rson m+1,R,rt<<1|1
#define LL long long using namespace std; const int MAXN = 2e5;
const int MOD = 1e9+7;
const int dx[5] = {0,1,-1,0,0};
const int dy[5] = {0,0,0,-1,1};
const double pi = acos(-1.0); LL ans = 1,l[MAXN+100],r[MAXN+100],cnt[MAXN+100];
int m;
LL a[MAXN+100] = {0};
vector <LL> pre[MAXN]; void input_LL(LL &r)
{
r = 0;
char t = getchar();
while (!isdigit(t) && t!='-') t = getchar();
LL sign = 1;
if (t == '-')sign = -1;
while (!isdigit(t)) t = getchar();
while (isdigit(t)) r = r * 10 + t - '0', t = getchar();
r = r*sign;
} void input_int(int &r)
{
r = 0;
char t = getchar();
while (!isdigit(t)&&t!='-') t = getchar();
int sign = 1;
if (t == '-')sign = -1;
while (!isdigit(t)) t = getchar();
while (isdigit(t)) r = r * 10 + t - '0', t = getchar();
r = r*sign;
} LL ksm(LL a,LL x)
{
if (x==0)
return 1;
LL temp = ksm(a,x>>1);
temp = (temp*temp)%MOD;
if (x&1)
temp = (temp*a)%MOD;
return temp;
} int main()
{
input_int(m);
for (int i = 1;i <= m;i++)
{
int x;
input_int(x);
cnt[x]++;
}
for (int i = 2;i <= MAXN;i++)
if (cnt[i])
a[++a[0]] = i;
l[0] = 1;r[a[0]+1] = 1;
for (int i = 1;i<=a[0];i++)
l[i] = (l[i-1]*(cnt[a[i]]+1))%(MOD-1);
for (int i = a[0];i>=1;i--)
r[i] = (r[i+1]*(cnt[a[i]]+1))%(MOD-1);
for (int i = 1;i <= a[0];i++)
{
LL temp1 = ((cnt[a[i]]*(cnt[a[i]]+1))/2)%(MOD-1);
LL temp2 = (l[i-1]*r[i+1])%(MOD-1);
LL temp = ksm(a[i],(temp1*temp2)%(MOD-1));
ans = (ans * temp)%MOD;
}
printf("%I64d\n",ans);
return 0;
}

【14.67%】【codeforces 615D】Multipliers的更多相关文章

  1. 【 BowWow and the Timetable CodeForces - 1204A 】【思维】

    题目链接 可以发现 十进制4 对应 二进制100 十进制16 对应 二进制10000 十进制64 对应 二进制1000000 可以发现每多两个零,4的次幂就增加1. 用string读入题目给定的二进制 ...

  2. 【24.67%】【codeforces 551C】 GukiZ hates Boxes

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

  3. 【26.67%】【codeforces 596C】Wilbur and Points

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

  4. 【中途相遇法】【STL】BAPC2014 K Key to Knowledge (Codeforces GYM 100526)

    题目链接: http://codeforces.com/gym/100526 http://acm.hunnu.edu.cn/online/?action=problem&type=show& ...

  5. 【codeforces 67A】Partial Teacher

    [题目链接]:http://codeforces.com/problemset/problem/67/A [题意] 给一个长度为n-1的字符串; 每个字符串是'L','R','='这3种字符中的一个; ...

  6. 【77.78%】【codeforces 625C】K-special Tables

    time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...

  7. 【codeforces 754D】Fedor and coupons

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

  8. 【codeforces 760A】Petr and a calendar

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

  9. 【codeforces 750E】New Year and Old Subsequence

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

随机推荐

  1. 【软件project】 文档 - 银行业务管理 - 需求分析

    ---------------------------------------------------------------------------------------------------- ...

  2. Android实践 -- 对apk进行系统签名

    对apk进行系统签名 签名工具 网盘下载 ,需要Android系统的签名的文件 platform.x509.pem 和 platform.pk8 这个两个文件在Android源码中的 ./build/ ...

  3. js进阶 13 jquery动画函数有哪些

    js进阶 13 jquery动画函数有哪些 一.总结 一句话总结: 二.jquery动画函数有哪些 原生JavaScript编写动画效果代码比较复杂,而且还需要考虑兼容性.通过jQuery,我们使用简 ...

  4. amazeui学习笔记--css(常用组件11)--分页Pagination

    amazeui学习笔记--css(常用组件11)--分页Pagination 一.总结 1.分页使用:还是ul包li的形式: 分页组件,<ul> / <ol> 添加 .am-p ...

  5. GCJ 2008 Round 1A Minimum Scalar Product

    https://code.google.com/codejam/contest/32016/dashboard 题目大意: GCJ(google code jam)上的水题.下周二有比赛,来熟悉熟悉. ...

  6. StackExchange.Redis 官方文档

    原文:StackExchange.Redis 官方文档 时隔多年的翻译终于完成了第六个,也是很重要的的官方文档,是介绍有关链接管理,管道流水线和多路复用的 官方地址在这里:官方文档 下面做个汇总: S ...

  7. 【Codeforces Round #445 (Div. 2) B】Vlad and Cafes

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 傻逼模拟 [代码] #include <bits/stdc++.h> using namespace std; cons ...

  8. GDB中创建要素数据集

    转自 在geodatabase中创建要素集 //在数据集中创建要素 private void menuItem25_Click(object sender, System.EventArgs e) { ...

  9. Log Explorer 使用说明(原创)

    关于Log Explorer (我抄的) 介绍Log Explorer主要用于对MSSQLServer的事物分析和数据恢复.你可以浏览日志.导出数据.恢复被修改或者删除的数据(包括执行过update, ...

  10. ArcEngine数据删除几种方法和性能比较

    转自原文 ArcEngine数据删除几种方法和性能比较 一.  几种删除方法代码 1.  查询结果中删除 private void Delete1(IFeatureClass PFeatureclas ...