二分快速幂
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; }