Given A,B,C, You should quickly calculate the result of A^B mod C. (1<=A,B,C<2^63)
由于A,B较大,中间过程可能爆long long
#include <iostream>
#include <stdio.h>
using namespace std;
long long quick(long long a,long long b,long long c)
{
a=a%c;
b=b%c;
long long cur=0;
while(b)
{
if(b&1)
{
cur=cur+a;
if(cur>=c) cur=cur-c;
}
a=a<<1;
if(a>=c) a=a-c;
b=b>>1;
}
return cur;
}
long long mod(long long a,long long b,long long c)
{
long long ans=1;
while(b)
{
if(b&1)
{
ans=quick(ans,a,c);
b--;
}
b/=2;
a=quick(a,a,c);
// a=a*a%c;
}
return ans;
}
int main()
{
long long a,b,c;
while(scanf("%I64d%I64d%I64d",&a,&b,&c)!=EOF)
{
printf("%I64d\n",mod(a,b,c));
}
return 0;
}