Description
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 4 2 10 1000
Sample Output
1 24
某大伽的超级代码
简便代码:
//模拟乘法。将乘法编程二进制加法。
#include <stdio.h>
unsigned __int64 mul (unsigned __int64 a,unsigned __int64 b,unsigned __int64 c)
{
unsigned __int64 res=0,tmp=a%c;
while(b)
{
if(b&1 && (res+=tmp) >= c)
res -= c;
if((tmp <<= 1) >= c)
tmp -= c;
b>>=1;
}
return res;
}
int main(void)
{
unsigned __int64 a,b,c,y;
while (scanf("%I64u %I64u %I64u",&a,&b,&c)!=EOF)
{
y = 1;
while(b)
{
if(b&1) y = mul (y,a,c);
a=mul(a,a,c);
b>>=1;
}
printf("%I64u\n",y%c);
}
return 0;
}