C ++中的模幂运算

时间:2013-03-03 12:52:07

标签: c++ modulo exponentiation

我的模幂运算代码出了点问题,尽管在使用两个不同的伪代码源时写了三次,但我无法发现问题。我在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;
}

1 个答案:

答案 0 :(得分:4)

清理函数mulmod1的输入! unsigned无法容纳9688563*9688563。 如果你这样做,你只需要一个可以保持modulus * modulus的数据类型(当然还有输入数字)来正确执行模幂运算。