时间限制: 1 s
空间限制: 1000 KB
题目描述 Description
给定非负整数A、B、M,求(A ^ B) mod M。
输入描述 Input Description
包含多组输入,输入处理到EOF。
每组输入仅一行,三个用空格隔开的非负整数A、B、M。
输出描述 Output Description
对于每组输入,输出一行,一个非负整数,即(A ^ B) mod M。
样例输入 Sample Input
2 3 100006
32 71 83
900 800 777
样例输出 Sample Output
8
5
219
数据范围及提示 Data Size & Hint
0 <= A, B < 8 * 10^18。
0 < M < 8 * 10^18。
保证A和B不同时为0。
本题仅给出部分关键代码
LL mul(LL a,LL b)
{
LL ans=0;
while(b)
{
if(b&1) ans=(ans+a)%p;
a=(a+a)%p;
b=b>>1;
}
return ans;
}
LL Pow(LL a,LL b)//这里可以直接写在main里面,不然对于大数据,会一直调用
{ //会浪费很多时间,遇到过卡这个的题目
LL result=1;
LL base=a%p;
while(b)
{
if(b&1) result=mul(result,base);
base=mul(base,base);
b=b>>1;
}
return result;
}