luogu P1405 苦恼的小明(欧拉定理)
题意
求a1^a2^a3^...^an(mod10007)n<=1000000,a[i]<=10000
题解
明眼人一眼就可以看出是欧拉定理的推论。
首先这个题是错的,没说保证互质。
然而我背错了定理,然后就一直减一。
之后发现要求phi,求完之后一直RE,交了题解还RE、、、
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<cmath> 5 #include<algorithm> 6 using namespace std; 7 const int N=5000000; 8 int phi[N],a[N],n,ans; 9 void get_phi(){ 10 phi[1]=1; 11 for(int i=2;i<=10010;i++) 12 if(!phi[i]) 13 for(int j=i;j<=10010;j+=i) 14 { 15 if(!phi[j])phi[j]=j; 16 phi[j]=phi[j]/i*(i-1); 17 } 18 } 19 int ksm(int x,int b,int md){ 20 int tmp=1; 21 x%=md; 22 while(b){ 23 if(b&1){ 24 tmp=(tmp*x)%md; 25 } 26 b>>=1; 27 x=(x*x)%md; 28 } 29 return tmp; 30 } 31 int dfs(int x,int md){ 32 if(x==n)return a[n]%md; 33 int y=dfs(x+1,phi[md]); 34 return ksm(a[x],y,md); 35 } 36 int main(){ 37 scanf("%d",&n); 38 for(int i=1;i<=n;i++){ 39 scanf("%d",&a[i]); 40 } 41 get_phi(); 42 printf("%d",dfs(1,10007)); 43 }