所谓的快速幂取模,就是快速的求一个幂式的模(余)。在程序设计过程中,经常要去求一些大数对于某个数的余数,为了得到更快、计算范围更大的算法,产生了快速幂取模算法。
下面使用 为例。我们可以使用余数相关定理,https://blog.youkuaiyun.com/justidle/article/details/104450728,我们知道
。
最朴素的方法
先类乘计算幂,再计算模。
int PowMod(int a, int b, int c) {
int ans=1;
for (int i=0; i<b; i++) {
ans *= a;
}
ans %= c;
return ans;
}
上面的算法时间复杂度为 O(n)。同时可能会由于 过大,导致的数据溢出。
快速幂取模
我们可以使用快速幂方法,https://blog.youkuaiyun.com/justidle/article/details/104450879,进行取模。
int PowMod(int a, int b, int c) {
int result=1;
int base=a%c;
while (b) {
if (b&1) {
result = (result*base)%c;
}
base = (base*base)%c;
b >>= 1;
}
return result;
}