FZU 1752高速べき乗型取り+乗算の加速
1347 ワード
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
Sample Output
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
a,b,c long long
#include
#include using namespace std; typedef unsigned long long LL; // , 。 LL mul(LL a,LL b,LL m)// a*b%m; { LL res=0,tmp=a%m; while(b) { if(b&1) if((res+=tmp)>=m) res-=m; if((tmp<<=1)>=m) tmp-=m; b>>=1; } return res; } LL quick_mod(LL a,LL b,LL m)// a^b%m { LL ans = 1; a%=m; while(b) { if(b%2==1) { ans=mul(ans,a,m); b--; } b/=2; a=mul(a,a,m); } return ans; } int main() { LL a,b,m; while(cin>>a>>b>>m){ cout<