저는 모듈러 지수를 필요로하는 SPOJ에 관한 질문을 풀려고합니다. 내가 (2^249999999997)%999999999989
을 계산할 때 다음과 같은 C 코드빠른 모듈러 지수에서 오버플로를 피하는 방법
long long modpow(long long a,long long b,long long mod)
{
long long product,pseq;
product=1
pseq=a%mod;
while(b>0)
{
if(b&1)
product=(product*pseq)%mod;
pseq=(pseq*pseq)%mod;
b>>=1
}
return product;
}
을 문제가 사용하고,이 때문에 오버 플로우의 0
답변을 제공합니다. 오버플로를 피하려면 어떻게해야합니까?
구현을 대폭 변경하지 않으면 피할 수 없다고 생각합니다. – 0decimal0
gmp libmp와 같은 큰 숫자 라이브러리를 사용하는 것이 더 좋습니다. – mathk
int64 * int64 결과 필요 int128 – BLUEPIXY