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.
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).
Print one integer — the product of all divisors of n modulo 109 + 7.
2 2 3
36
3 2 3 2
1728
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.
题意:给你
n
个素数,让你求它们相乘之后的数的因子之积
题解:思路来自:http://blog.csdn.net/helloiamclh/article/details/52190564
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define maxn 1010000
#define mod 1000000007
__int64 cnt[maxn];
__int64 q(__int64 x,__int64 y)
{
__int64 res=1;
while(y)
{
if(y%2)
res=res*x%mod;
x=x*x%mod;
y/=2;
}
return res;
}
int main(void)
{
__int64 m,i,x;
scanf("%I64d",&m);
for(i=1;i<=m;i++)
{
scanf("%I64d",&x);
cnt[x]++;
}
__int64 sum=1;
for(i=1;i<=200000;i++)
if(cnt[i])
sum=(sum*(1+cnt[i]))%(2*mod-2);
__int64 ans=1;
for(i=1;i<=200000;i++)
if(cnt[i])
ans=(ans*q(i,cnt[i]*sum/2))%mod;
printf("%I64d\n",ans);
return 0;
}