Super A^B mod C [FZU 1759]
http://acm.fzu.edu.cn/problem.php?pid=1759
View Code
//A^x = A^(x % Phi(C) + Phi(C)) (mod C) 的应用 const int MM = 1111111; #define debug puts("wrong") typedef __int64 int64; const double lep=1e-10; int64 N,mod; char str[MM]; int64 euler(int64 x) { int64 i, res=x; for(i=2;(i*i)<=x;i++) { if(x%i==0) { res=res/i*(i-1); while(x%i==0) x/=i; } } if(x>1) res=res/x*(x-1); return res; } int64 pow(int64 x,int64 y) { int64 res=1; while(y) { if(y&1) { res=res*x; if(res>=mod) res%=mod; } x=x*x; y>>=1; if(x>=mod) x%=mod; } return res; } void solve() { int64 i,j,k,tmp,res=0; tmp=euler(mod); for(i=0;str[i];i++) { res=res*10+(str[i]-'0'); if(res>=tmp) res%=tmp; } res+=tmp; printf("%I64d\n",pow(N,res)); } int main() { while(scanf("%I64d%s%I64d",&N,str,&mod)!=EOF) solve(); return 0; }