2015-04-04 59 views
0

當2^n除以m時,如果有任何可能的有效方法找到餘數,那麼我是在徘徊,其中n和m是隨機整數。是否有任何方程式,我將n和m分成餘數,還是必須遵循遞歸方法? 請注意,我是初學者,我剛剛開始,所以可能不理解太複雜的東西。計算2^n Mod m的最快方法,其中n和m是隨機整數

在此先感謝。

+0

你是什麼意思的「抽象整數」? – user2357112 2015-04-04 23:24:28

+0

對不起,英語不是我的第一語言。我的意思是它可以帶來任何價值。我認爲我在這裏誤用了抽象:) – AspiringMat 2015-04-04 23:28:22

回答

-1

Fermat's little theorem可以幫助你在情況是質數:

如果p是一個素數,則對任意整數a,數量a^p − ap的整數倍。

例如,如果a = 2p = 72^7 = 128128 − 2 = 7 × 187的整數倍。

0

乘法模運算是這樣的:

(A * B)%X =((A%×)*(B%X))%×

這裏是C++代碼即:

#include <cstdio> 
#include <cstdlib> 

using namespace std; 

int powmod(int n, int m) { 
    int ret = 1; 
    for(int i = 0; i < n; ++i) 
    ret = ((ret % m) * (2 % m)) % m; // expression from above 
    return ret; // returns 2 to the power n modulo m 
} 

int main() { 

    int n, m; scanf("%d%d", &n, &m); 
    printf("%d\n", powmod(n, m)); 

    return 0; 
} 
+0

ret總是比m小,因此你可以寫'ret =(ret * 2)%m;' – SpiderPig 2015-04-04 23:58:13