指數迴圈節 uva 10692
阿新 • • 發佈:2019-01-22
#include<cstdio> #include<cstring> #include<cmath> using namespace std; int d[1000],n,m; int qcal(int a,int n,int m) { int res=1; while(n) { if(n&1) res=res*a%m; n>>=1; a=a*a%m; } return res; } int pcal(int n) { int m=(int)sqrt(n+0.5); int res=n; for(int i=2;i<=m;i++) if(n%i==0) { res=res/i*(i-1); while(n%i==0) n/=i; } if(n>1) res=res/n*(n-1); return res; } int solve(int lo,int m) { if(lo==n-1) return d[lo]%m; int phi=pcal(m); int t; // if(d[lo+1]>=phi) t=solve(lo+1,phi)+phi; // else // t=solve(lo+1,m); return qcal(d[lo],t,m); } int main() { char str[1000]; int t=1; while(~scanf("%s",str)&&str[0]!='#') { sscanf(str,"%d",&m); scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d",&d[i]); printf("Case #%d: %d\n",t++,solve(0,m)); } }