Xhesika_Frost @ 2021-10-12 09:11:56
本人的快速幂代码如下
int qp(int x,int mi){
int ans=1;
int tem=x%mod;
while(mi){
if(mi&1){
ans*=tem;
ans%=mod;
}
tem*=tem;
tem%=mod;
mi>>=1;
}
return ans;
}
然后本人调用的时候如果这样写就会溢出
ans*=(qp(i,cnt)-1)%mod*(qp(i-1,mod-2))%mod;
如果这样写就不会
ans*=(qp(i%mod,cnt)-1)%mod*(qp(i%mod-1,mod-2))%mod;
这是为什么呢
by Eason_AC @ 2021-10-12 09:27:41
你把下面这一段
if(mi&1){
ans*=tem;
ans%=mod;
}
tem*=tem;
tem%=mod;
改写成:
if(mi&1) ans=1ll*ans*tem%mod;
tem=1ll*tem*tem%mod;
看看会不会过?
@SheffieldArchie
by Xhesika_Frost @ 2021-10-12 09:30:51
@Eason_AC 还是会溢出诶
以及我写了
define int long long
by Eason_AC @ 2021-10-12 09:38:57
@SheffieldArchie 那您怎么不早说
by Xhesika_Frost @ 2021-10-12 09:43:55
@Eason_AC 疏忽疏忽 对不起对不起 (。・_・。)ノI’m sorry~
by fjy666 @ 2021-10-12 09:51:01
plz don`t at me.
i%mod==0
就boom了。