RT,用的 __int128
// Problem: P4777 【模板】扩展中国剩余定理(EXCRT)
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P4777
// Memory Limit: 500 MB
// Time Limit: 1000 ms
// Powered by CP Editor (https://github.com/cpeditor/cpeditor)
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define M 100005
__int128 sad,ans,lcm;
int n,a[M],b[M],Y,X;
void ct(string s)
{
cout<<s<<endl;
}
int Exgcd(int fx,int fy,int &x,int &y)
{
if(!fy){x=1;y=0;return fx;}
int fz=Exgcd(fy,fx%fy,y,x);
y-=x*(fx/fy);return fz;
}
void Merge(int w)
{
int g=Exgcd(lcm,a[w],X,Y);
X*=(b[w]-ans)/g;Y*=(b[w]-ans)/g;
if(X<=0)
{
X+=(-X/a[w])*a[w];
if(X<=0) X+=a[w];
}
else
{
X-=(X/a[w])*a[w];
if(X<=0) X+=a[w];
}
ans=ans+X*lcm;
lcm=lcm*a[w]/g;
if(ans<0||lcm<0) ct("D");
ans-=(ans/lcm)*lcm;
if(ans<=0) ans+=lcm;
if(w!=n) Merge(w+1);//递归部分
}
signed main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i]>>b[i];
}
// cout<<lcm<<' ';
ans=b[1];lcm=a[1];
Merge(2);//递归合并式子
ans-=(ans/lcm)*lcm;
if(ans<=0) ans+=lcm;
n=ans;//int128无法直接输出
cout<<n<<endl;
return 0;
}