RT,用龟速乘之前是正常的90,加了之后就T了8个点
#include <cstdio>
using namespace std;
#define ll long long
int n;
int a[15],b[15];
ll multi(ll a,ll b,ll mod){
ll res=0;
while(b){
if (b&1){
res=(res+a)%mod;
}
a=(a+a)%mod;
b>>=1;
}
return res;
}
ll exgcd(ll a,ll b,ll &x,ll &y){
if (b==0){
x=1;
y=0;
return a;
}
ll r=exgcd(b,a%b,x,y);
ll t=x;
x=y;
y=t-a/b*y;
return r;
}
ll CRT(int a[],int m[],int n){
ll M=1,ans=0;
for (int i=1;i<=n;i++){
M*=m[i];
}
for (int i=1;i<=n;i++){
ll Mi=M/m[i],x,y;
exgcd(Mi,m[i],x,y);
ans=(ans+multi(multi(Mi,x,M),a[i],M))%M;
}
return (ans+M)%M;
}
int main(){
scanf("%d",&n);
for (int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
for (int i=1;i<=n;i++){
scanf("%d",&b[i]);
a[i]=(a[i]%b[i]+b[i])%b[i];
}
printf("%lld",CRT(a,b,n));
return 0;
}