思想:二分法
源代码
快速幂(非递归)
ll quickmod(ll a,ll b ,ll mod){
ll ans =1;
while(b){
if(b&1)ans=ans*a%mod;
a = a*a%mod;
b>>=1;
}
return ans;
}
快速幂(递归)
ll Quickmod(ll a,ll b ,ll mod){
if(b==0)return 1;
if(b==1)return a%mod;
a%=mod;
if(b&1)return Quickmod(a,b>>1,mod)*a%mod;
else return Quickmod(a,b>>1,mod)%mod;
}
二分乘法
ll quickmul(ll a,ll b,ll mod){
ll ans = 0;
while(b){
if(b&1)ans=(ans+a)%mod;
a=(a+a)%mod;
b>>=1;
}
return ans;
}