#include <bits/stdc++.h>
using namespace std;
#define int __int128
const int N=1e5+5;
int n,x,y,gcd,lcm;
struct node{int p,a;}e[N];
void exgcd(int a,int b){
if(b==0){
gcd=a,x=1,y=0;
return;
}
exgcd(b,a%b);
int o=x;
x=y;
y=o-a/b*y;
}
node excrt(node o1,node o2){
int a1=o1.a,a2=o2.a,p1=o1.p,p2=o2.p,x0;
exgcd(-p1,p2);
//cout<<x<<endl;
assert((a2-a1)%gcd==0);
int c=(a2-a1)/gcd;
lcm=(-p1)*p2/gcd;
x0=(x*(-p1)*c+a1)%lcm;//这里为什么是 -p
if(x0<0)x0+=lcm;
return node{lcm,x0};
}
int read() {long long t; cin>>t; return t;}
signed main(){
n=read();
for(int i=1;i<=n;i++){
e[i].p=read(),e[i].a=read();
}
if(n==1){cout<<(long long)e[1].a;return 0;}
node ans=excrt(e[1],e[2]);
//cout<<ans.a<<" "<<ans.p<<endl;
for(int i=3;i<=n;i++){
ans=excrt(ans,e[i]);
}
cout<<(long long)ans.a;
return 0;
}
注释行
{x≡a1(modp1)x≡a2(modp2)
x=a1+n1p1=a2+n2p2
n2p2−n1p1=a1−a2
n2p2−n1p1=(−p1,p2)
这里的 p1 是要带负号的
但是上面的 x=a1+n1p1 不用带啊
为什么注释那行不加 − 就不对