簡體   English   中英

C ++中的模冪

[英]Modular exponentiation in C++

我的模塊冪運算代碼有些錯誤,盡管使用兩個不同的偽代碼源編寫了3次,但我無法發現問題。 我已經閱讀了有關SE上C ++中的模冪運算的其他問題,但這對我沒有幫助。 這是我最后的代碼,我以更簡單但不太理想的方式編寫:

#include<iostream>
using namespace std;

// base ^ exponent mod modulus 
unsigned mulmod1(unsigned base, unsigned exponent, unsigned modulus) {
    int result = 1;
    while(exponent > 0){
        if(exponent % 2 == 1)
            result = (result * base) % modulus;
        exponent >>= 1;
        base = (base * base) % modulus;
    }
  return result;
}

int main(){

//9688563^45896 mod 71 = 30
//12^53 mod 7 = 3

cout<<mulmod1(9688563,45896 ,71)<<"\n";   //gives 10 instead of 30
cout<<mulmod1(12,53,7)<<"\n";             //gives correct answer 3

return 0;
}

清理函數mulmod1的輸入! unsigned不能保存9688563*9688563 如果正確執行此操作,則“僅”需要一個數據類型,該數據類型可以保存modulus * modulus (當然還有您的輸入數字)才能正確執行模冪運算。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM