我的模幂运算代码有问题,尽管在使用两种不同的伪代码源时写了三遍,但我无法发现问题。我已经阅读了有关 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;
}