不保证两两互质
设已求出前个方程的解,记为
记
则为前个方程的通解
考虑第个方程
用解出
若无解则方程组无解
若有解则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
40
41
42
const int N=100050;
LL n,x,y,a[N],m[N],M=1;
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;
}
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 gcd(LL a,LL b){return b?gcd(b,a%b):a;}
LL exCRT()
{
LL M=m[1],ans=a[1];
for(int i=2;i<=n;i++)
{
LL w=gcd(M,m[i]);
LL c=(a[i]-ans)%m[i]+m[i];
exgcd(M/w,m[i]/w,x,y);
x=mul(x,c%m[i]/w,m[i]);
ans+=x*M,M*=m[i]/w;
}
return (ans%M+M)%M;
}
int main()
{
scanf("%lld",&n);
for(int i=1;i<=n;i++)
scanf("%lld%lld",&m[i],&a[i]);
printf("%lld\n",exCRT());
return 0;
}