90分 最后一个点WA了求助(关注为回报)

P3868 [TJOI2009] 猜数字

@[gods](/user/326126) 最后一个点要用龟速乘否则会爆 $longlong$ ```cpp #include<bits/stdc++.h> using namespace std; long long a[250]; long long b[250]; long long x; long long n; long long y; long long ksc(long long x,long long y,long long mod){ if(y==0) return 0; long long z=ksc(x,y/2,mod) % mod; z=(z+z); if(y%2==1) z=(z+x) % mod; return z%mod; } void dd(long long a,long long b){ if(b==0){ x=1;y=0; }else{ dd(b,a%b); long long z=x;x=y;y=z-a/b*y; } } long long d(long long a,long long b){ dd(a,b); return (x%b+b)%b; } long long f(){ long long ml=1,ans=0; for(int i=1;i<=n;i++){ ml*=b[i]; } for(int i=1;i<=n;i++){ ans+=ksc(ksc(d(ml/b[i],b[i]),a[i],ml),(ml/b[i]),ml); ans%=ml; } return (ans%ml+ml)%ml; } int main(){ cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; } for(int i=1;i<=n;i++){ cin>>b[i]; a[i]=(a[i]%b[i]+b[i])%b[i]; } cout<<f(); return 0; } ```
by phmaprostrate @ 2021-09-06 08:15:22


@[gods](/user/326126) 你 `long long` 全部换成 `__int128` 就行了
by Eason_AC @ 2021-09-07 11:03:20


|