刚才提交三次均在第 2 个测试点 RE,先把核心错误部分展示一下。
int renum(long long now){
if(now==1) return fapow(cnt+1);
int d=renum(now/2);
d=(long long)d*(fapow((now/2)%(modu-1)*(cnt+1)%(modu-1))+1)%modu;
if(now%2) d+=fapow(now%(modu-1)*(cnt+1)%(modu-1));
return d%modu;
}
int main(){
ans=(renum(n-1)+1)%modu;
}
所以这个使程序 RE 的“大数”不是 1018 之类,而是 1。因为所有正整数减 1 之后不断除以 2 总会得到 1,但 1 除外。所以输入 1 时递归无出口,于是 RE。
真是一次有趣的 RE。