ACM:a^b%p-数论-快速幂-快速乘
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; }