#include<bits/stdc++.h>
typedef __int128 LL;
using namespace std;
const int SIZE=6e3+10;
LL k,n;
LL M=1,m[SIZE],invm[SIZE];
LL a[SIZE],b[SIZE];
LL read()
{
LL x=1,res=0;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')x=-1;ch=getchar();}
while(isdigit(ch)){res=(res<<3)+(res<<1)+(ch^48);ch=getchar();}
return x*res;
}
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;
}
signed main()
{
k=read();
for(int i=1;i<=k;i++) a[i]=read();
for(int i=1;i<=k;i++)
{
b[i]=read();
M*=b[i];
}
for(int i=1;i<=k;i++)
{
LL x,y;
m[i]=M/b[i];
exgcd(m[i],b[i],x,y);
x=(x+b[i]%b[i]);
invm[i]=x;
n=(n+a[i]*m[i]*invm[i]+M)%M;
}
n=(n+M)%M;
printf("%lld",n);
return 0;
}
用exgcd求的逆元, 开unsigned long long 50pts, 开long long 90pts(WA on #10), 开__int128 AC 了。有些不解,请大佬们指教