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. PatentTips - Adaptive algorithm for selecting a virtualization algorithm in virtual machine environments

    BACKGROUND A Virtual Machine (VM) is an efficient, isolated duplicate of a real computer system. Mor ...

  2. oled的一套stm32实验2(自己的实验)

    stm32与OLED屏接口的引脚介绍: CS————GPIOD3: RST————GPIOD4: DC—————GPIOD5: D0——————GPIOD6: D1——————GPIOD7; 上是我参 ...

  3. (转)iptables常用规则:屏蔽IP地址、禁用ping、协议设置、NAT与转发、负载平衡、自定义链

    转自:http://lesca.me/archives/iptables-examples.html 本文介绍25个常用的iptables用法.如果你对iptables还不甚了解,可以参考上一篇ipt ...

  4. PHP URL参数获取方式的四种例子

    在已知URL参数的情况下,我们可以根据自身情况采用$_GET来获取相应的参数信息($_GET['name']);那,在未知情况下如何获取到URL上的参数信息呢? 第一种.利用$_SERVER内置数组变 ...

  5. 【b702】字符串的展开

    Time Limit: 1 second Memory Limit: 50 MB [问题描述] 在初赛普及组的"阅读程序写结果"的问题中,我们曾给出一个字符串展开的例子:如果在输入 ...

  6. 使用ganglia监控hadoop及hbase集群 分类: B3_LINUX 2015-03-06 20:53 646人阅读 评论(0) 收藏

    介绍性内容来自:http://www.uml.org.cn/sjjm/201305171.asp 一.Ganglia简介 Ganglia 是 UC Berkeley 发起的一个开源监视项目,设计用于测 ...

  7. Jquery浅克隆与深克隆是什么

    Jquery浅克隆与深克隆是什么 一.总结 一句话总结:克隆的那些标签内容就是对应元素的html,事件就是那些绑定的事件. 1.jquery克隆的时候的注意事项是什么? 元素数据(data)内对象和数 ...

  8. 服务器负载均衡lvs(Linux Virtual Server)

    服务器负载均衡lvs(Linux Virtual Server) 一.总结 LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统. 三.Linu ...

  9. [Recompose] Render Nothing in Place of a Component using Recompose

    Learn how to use the ‘branch’ and ‘renderNothing’ higher-ordercomponents to render nothing when a ce ...

  10. C++实现简单的内存块自己主动管理

    #ifndef __MEM__H #define __MEM__H #include<iostream> using namespace std; //自己主动管理内存块 typedef ...