我想解決一個關於SPOJ需要模冪運算的問題。我現在用的是下面的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;
}
問題是,當我想計算(2^249999999997)%999999999989
,它給了回答0
因爲溢出。我怎樣才能避免溢出?
我不認爲它是可以避免的,除非你徹底改變了實現。 – 0decimal0
更好的使用大數字庫,像gmp libmp ... – mathk
int64 * int64的結果需要int128 – BLUEPIXY