可惜没如果=_=
时光的河入海流

 

 这题公式其实非常好推,主要是在幂的指数上取模的时候,应该用欧拉定理,指数上模的应该是MOD对应的欧拉函数值

 1 #include "bits/stdc++.h"
 2 using namespace std;
 3 typedef long long LL;
 4 const int MOD=1e9+7;
 5 const int MAX=2e5+5;
 6 LL ans,n,a[MAX],b[MAX],c[MAX];
 7 LL ksm(LL x,LL y){
 8     LL an=1ll;
 9     while (y){
10         if (y%2==1ll) an=(an*x)%MOD;
11         x=(x*x)%MOD;
12         y/=2ll;
13     }
14     return an;
15 }
16 LL ksm2(LL x,LL y){
17     LL an=1ll;
18     while (y){
19         if (y%2==1ll) an=(an*x)%(MOD-1);
20         x=(x*x)%(MOD-1);
21         y/=2ll;
22     }
23     return an;
24 }
25 inline LL read(){
26     LL an(0ll),x=1ll;char c=getchar();
27     while (c<'0' || c>'9') {if (c=='-') x=-1;c=getchar();}
28     while (c>='0' && c<='9') {an=an*10+c-'0';c=getchar();}
29     return an*x;
30 }
31 bool cmp(LL x,LL y){
32     return x<y;
33 }
34 int main(){
35     freopen ("b.in","r",stdin);
36     freopen ("b.out","w",stdout);
37     int i,j;
38     LL x,y,z,mul=1ll;
39     n=read();
40     for (i=1;i<=n;i++) a[i]=read();
41     sort(a+1,a+n+1,cmp);
42     memset(b,0,sizeof(b));
43     memset(c,0,sizeof(c));
44     for (i=1;i<=n;i++)
45         if (a[i]!=a[i-1]){
46             b[++b[0]]=a[i];
47             c[++c[0]]=1;
48         }
49         else c[c[0]]++;
50     ans=1ll;bool flag=true;
51     for (i=1;i<=c[0];i++){
52         mul=(mul*(c[i]+1))%(MOD-1);
53         if ((c[i]+1)%2==0 && flag){
54             flag=false;
55             mul/=2;
56         }
57     }
58     for (i=1;i<=b[0];i++){
59         x=c[i];
60         if (flag) x/=2ll;
61         z=(x*mul%(MOD-1))%(MOD-1);
62         ans=(ans*ksm(b[i],z))%MOD;
63     }
64     printf("%lld",ans);
65     return 0;
66 }

 

posted on 2021-07-13 21:04  珍珠鸟  阅读(39)  评论(0编辑  收藏  举报