二分思想:
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;
}
本文介绍了两种快速幂取模算法的实现方式:二分思想快速幂和位操作快速幂。这两种方法都极大地提高了计算效率,将时间复杂度从O(n)降低到O(logn)。适用于大整数幂运算中求模的情况。
1715

被折叠的 条评论
为什么被折叠?



