所謂的快速冪取模,就是快速的求一個冪式的模(餘)。在程序設計過程中,經常要去求一些大數對於某個數的餘數,爲了得到更快、計算範圍更大的算法,產生了快速冪取模算法。
下面使用 爲例。我們可以使用餘數相關定理,https://blog.csdn.net/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.csdn.net/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;
}