모듈러 지수법에 대한 내 코드에 문제가있어 두 가지 다른 의사 코드 소스를 사용할 때 세 번 쓰지 만 문제를 발견 할 수 없습니다. SE의 C++에서 모듈러 지수법에 대한 다른 질문을 읽었지 만 그 점이 도움이되지 못했습니다. 다음은 내가 생각하는 간단하지만 적은 최적의 방법에 의해 쓰여진 마지막 코드입니다 :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;
}
코드에서 사람들에게 오류를 발견하도록 요청하는 것은 특히 생산성이 높지 않습니다. 디버거를 사용하여 (또는 인쇄 문을 추가하여) 문제를 격리 한 다음 [최소 테스트 케이스] (http://sscce.org)를 구성해야합니다. –
print 서술문을 추가했지만 도움이되지 않아 모듈 식 지수 또는 C++ 자체의 아이디어로 이해할 수 없다고 생각하기 시작했습니다. – Qbik
작동하지 않는 간단한 테스트 케이스를 찾아야합니다. print 문을 추가하여 매 반복마다 매 변수마다 값을 추적하고 수동 계산과 비교하십시오. 불일치가 생기 자마자 버그를 발견했습니다. –