1、整数的快速幂
a^b%m当b还不是很大的时候
(a%m)……%m
int mod(int a,int b,int m){ int ans=1,i; for(i=1;i<=b;i++){ ans=ans*a%m; } return ans; }
但是a,b太大可能存不下,所以这里介绍一种利用二分的思想
2、把指数b表示成相应的二进制形式
是0的位不给予考虑,
long long mod(long long a,long long b,long long m){
long long ans=1;
while(b){
if(b&1){
ans=(ans*a)%m;
b--;
}
b/=2;
a=a*a%m;
}
return ans;
}
另外一种是递归的方法
long long mod(long long a,long long b,long long m){
if(b==1)
return a%m;
if(b%2)
return mod(a*a%m,b/2,m)*a%m;
else
return mod(a*a%m,b/2,m)%m;
}