其中
设
则
且在M 以内有唯一解1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
const int N=15;
LL a[N],b[N],M[N]={1},r[N],n,x,ans=0;
void exgcd(LL a,LL b,LL &x,LL &y)
{
if (!b)
{
x=1,y=0;
return;
}
exgcd(b,a%b,y,x);
y-=a/b*x;
}
LL mul(LL a,LL b,LL mod)
{
LL ret=0;
for(;b;b>>=1)
{
if (b&1) ret=(ret+a)%mod;
a=(a<<1)%mod;
}
return ret;
}
int main()
{
scanf("%lld",&n);
for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
for(int i=1;i<=n;i++) scanf("%lld",&b[i]);
for(int i=1;i<=n;i++) a[i]=(a[i]%b[i]+b[i])%b[i];
for(int i=1;i<=n;i++) M[0]*=b[i];
for(int i=1;i<=n;i++) M[i]=M[0]/b[i];
for(int i=1;i<=n;i++) exgcd(M[i],b[i],r[i],x);
for(int i=1;i<=n;i++) r[i]=(r[i]%b[i]+b[i])%b[i];
for(int i=1;i<=n;i++)
ans=(ans+mul(mul(a[i],M[i],M[0]),r[i],M[0]))%M[0];
printf("%lld\n",(ans%M[0]+M[0])%M[0]);
return 0;
}