二分快速幂
1.递归
a^b=a^(b/2)*a^(b^2),并且要判断b的奇偶性。
long long pow_mod(long long a,long long b,long long mod){
if(!b){
return 1;
}
if(b==1){
return a%mod;
}
long long res = pow_mod(a,b/2,mod);
if(b&1){
return res%mod*res%mod*a%mod;
}
return res%mod*res%mod;
}
2.递推
遍历二进制的每一位
int pow_mod(int a,int b,int mod){
int ans=1%mod;
for(;b;b >>= 1){
if(b&1){
ans= (long long)ans*a%mod;
}
a = (long long) a*a%mod;
}
return ans;
}
整数乘法
类似二分快速幂,递推。
long long mul_mod(long long a,long long b,long long mod){
int ans=0;
for(;b;b>>=1){
if(b&1){
ans=(long long)(ans+a)%mod;
}
a = (long long)(a*2)%mod;
}
return ans;
}