[FOJ 1752] A^B mod C
Problem 1752 A^B mod C
Accept: 750 Submit: 3205
Time Limit: 1000 mSec Memory Limit : 32768 KB
Problem Description
Given A,B,C, You should quickly calculate the result of A^B mod C. (1<=A,B,C<2^63).
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 4
2 10 1000
Sample Output
1
24
#include <iostream> #include <cstdio> using namespace std; #define ll __int64 ll quickadd(ll a,ll b,ll c) //运用快速幂的思想快速加,这样就不会溢出 { ll ret=0; while(b) { if(b&1) { ret+=a; if(ret>=c) ret-=c; //这样比直接取模(ret%=c)更快 } a<<=1; if(a>=c) a-=c; b>>=1; } return ret; } ll quickpow(ll a,ll b,ll c) { ll ret=1; while(b) { if(b&1) ret=quickadd(a,ret,c); a=quickadd(a,a,c); b>>=1; } return ret; } int main() { ll a,b,c; while(scanf("%I64d%I64d%I64d",&a,&b,&c)!=EOF) { printf("%I64d\n",quickpow(a%c,b,c)); } return 0; }
趁着还有梦想、将AC进行到底~~~by 452181625