#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll read(){
char ch = getchar();
while(!isdigit(ch) && ch != '-') ch = getchar();
ll X = 0 , f = 1;
if(ch == '-') f = -1 , ch = getchar();
while(isdigit(ch)) X = (X<<1)+(X<<3)+ch-'0' , ch = getchar();
return X*f;
}
ll exgcd(ll a,ll b,ll &x,ll &y){
if(b == 0){
x = 1;
y = 0;
return a;
}
ll d = exgcd(b,a%b,x,y);
ll z = x; x = y; y = z-(a/b)*y;
return d;
}
ll mul(ll a,ll b,ll M){
ll ans = 0;
while(b){
if(b & 1)
ans = (ans+a)%M;
a = (a+a)%M;
b >>= 1;
}
return ans;
}
const int N = 12;
ll k,n;
ll a[N] , b[N];
ll M = 1;
int main(){
k = read();
for(int i=1;i<=k;i++) a[i] = read();
for(int i=1;i<=k;i++) b[i] = read();
for(int i=1;i<=k;i++)
M *= b[i];
for(int i=1;i<=k;i++){
ll m = M/b[i];
ll x,y;
exgcd(m,b[i],x,y);
x = (x%M+M)%M;
n = (n+mul(mul(a[i],m,M),x,M))%M;
}
cout << (n+M)%M;
return 0;
}
其中ai和x可能是负的,龟速乘可能会死循环...... 所以
x = (x%M+M)%M;
mul(a[i],m,M)//a_i放前面