Time Limit: 1000MS | Memory Limit: 65535KB | 64bit IO Format: |
Description
求a的b次方,取模mod(1<=a,b,mod<=1e18)
Input
多组输入,每组数据一行,3个正整数,分别为a,b,mod
Output
每组数据输出一行,为答案
Sample Input
2 10 10000000 5 100 1 0 2 37
Sample Output
1024 0 0
//模版题,主要是考虑到1e18的巨大,普通的快速幂会爆LL 所以在相乘的地方用上快速乘,避免爆LL。
#include"cstdio"
long long mod_mul(long long a,long long b,long long p) {
long long r=0;
long long t=a;
while(b) {
if(b&1) r=(r+t)%p;
t=(t<<1)%p;
b>>=1;
}
return r;
}
long long mod_pro(long long a,long long b,long long p) {
long long r=1;
long long t=a;
while(b) {
if(b&1) r=mod_mul(r,t,p)%p;
t=mod_mul(t,t,p)%p;
b>>=1;
}
return r;
}
int main(){
long long a,b,mod;
while(~scanf("%I64d%I64d%I64d",&a,&b,&mod)){
printf("%I64d\n",mod_pro(a,b,mod));
}
return 0;
}