快速冪取模

所謂的快速冪取模,就是快速的求一個冪式的模(餘)。在程序設計過程中,經常要去求一些大數對於某個數的餘數,爲了得到更快、計算範圍更大的算法,產生了快速冪取模算法。

下面使用 a^{b} \ mod \ c 爲例。我們可以使用餘數相關定理,https://blog.csdn.net/justidle/article/details/104450728,我們知道 a^{b} \ mod \ c = ((a \ mod \ c)^{b}) \ mod \ c

最樸素的方法

先類乘計算冪,再計算模。

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)。同時可能會由於 a^{b} 過大,導致的數據溢出。

快速冪取模

我們可以使用快速冪方法,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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章