Knowing the power-down formula makes it easy to reduce the power when B> = PHI (C), and then quickly calculate the power. Otherwise, the power is directly calculated.
Here, the large number of decimal modulo is directly used to take the modulo property by bit.
//A^B %C=A^( B%phi(C)+phi(C) ) %C#include <cstdlib>#include <cstring>#include <cstdio>#include <iostream>#include<string>#include<cmath>using namespace std;typedef __int64 ll;int phi(int x){ int i,j; int num = x; for(i = 2; i*i <= x; i++) { if(x % i == 0) { num = (num/i)*(i-1); while(x % i == 0) { x = x / i; } } } if(x != 1) num = (num/x)*(x-1); return num;}ll quickpow(ll m,ll n,ll k){ ll ans=1; while(n) { if(n&1) ans=(ans*m)%k; n=(n>>1); m=(m*m)%k; } return ans;}char tb[1000015];int main(){ ll a,nb; int c; while(scanf("%I64d%s%d",&a,tb,&c)!=EOF) { int PHI=phi(c); ll res=0; for(int i=0;tb[i];i++) { res=(res*10+tb[i]-'0'); if(res>c)break; } if(res<=PHI) { printf("%I64d\n",quickpow(a,res,c)); } else { res=0; for(int i=0;tb[i];i++) { res=(res*10+tb[i]-'0')%PHI; } printf("%I64d\n",quickpow(a,res+PHI,c)); } } return 0;}