을 반환하므로 C와 같은 모양의 모듈러 함수를 얻었습니다. m, E의 값을 인쇄 할 때C 함수는 잘못된 int 값인
int modexp(int m, int e, int n)
{
printf("%i\n", m);
printf("%i\n", e);
printf("%i\n", n);
printf("\n");
if(e == 0)
{
return 1;
}
if(e%2 == 1)
{
return modexp(m, e-1, n) * m%n;
}
else
{
int modTemp = modexp(m, (int)(e/2), n);
modTemp = modTemp * modTemp;
return modTemp % n;
}
}
나는이
int p = 3511;
printf("%i\n", modexp(2, p-1, p*p));
처럼 내 main() 함수에서 호출하고있는 n은 나는 결국 = 0을 전자까지 올바른 재귀 값을 가져 . 함수가 1을 반환해야하는 경우입니다. 예상 된 정수 1 대신 코드의 해당 위치에 확실히 반환되지만, -6593454가 발생하고 이유를 알 수 없습니다.
전체 코드
는 여기에서 찾을 수 있습니다 : https://gist.github.com/anonymous/7024ac77b2432a381968모든 입력이 매우 감사합니다 ... 당신의 숫자가 넘쳐
이것은 단순한 경우입니다. 정수 오버 플로우. 코드 상단에'#include'을 추가하고'int'를'uint64_t'로,'% i'을'% llu'로 변경하십시오. –