二分思想:
a^n%m=(a^(n/2))^2%m n为偶数 (a^(n/2))^2%m*(a%m) n为奇数
注:把时间复杂度从o(n)降为o(logn)了
//m^n%k模板
int binary_pow(int m,int n,int k){
if(n==1) return m%k;
else if(n%2==0){
int b=binary_pow(m,n/2,k);
return (b*b)%k;
}
else{
int b=binary_pow(m,n/2,k);
return ((b*b)%k)*(m%k);
}
}
快速幂取模:
//m^n%k模板
int quickpow(int m,int n ,int k){
int b=1;
while(n>0){
if(n&1){
b=(b*m)%k;
}
n=n>>1;
m=(m*m)%k;
}
return b;
}