標籤:style blog http color os strong io for
Given A,B,C, You should quickly calculate the result of A^B mod C. (1<=A,C<=1000000000,1<=B<=10^1000000).
Input
There are multiply testcases. Each testcase, there is one line contains three integers A, B and C, separated by a single space.
Output
For each testcase, output an integer, denotes the result of A^B mod C.
Sample Input
3 2 42 10 1000
Sample Output
124
處理大數的方法挺經典的,把別人代碼貼出來以示膜拜
view code//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;}