#include <bits/stdc++.h>
#define inf 0x7fffffff
#define ll long long
#define int long long
//#define double long double
#define eps 1e-8
//#define mod 1e9+7
using namespace std;
const int mod=1e5+7;
const int M=1e5;
const int N=1e6+5;//空间最大限制 4e8
int n,a[N],b[N];
int exgcd(int a,int b,int &x,int &y)
{
if(!b)
{
x=1;
y=0;
return a;
}
int d=exgcd(b,a%b,x,y);
int z=x;x=y;y=z-y*(a/b);
return d;
}
int mul(int a,int b,int c){
int res=0;
while(b>0)
{
if(b&1) res=(res+a)%c;
a=(a+a)%c;
b>>=1;
}
return (res%c+c)%c;
}
int china()
{
int m=b[1];
int ans=a[1];
int x,y;
for(int i=2;i<=n;i++)
{
int c=((a[i]-ans)%b[i]+b[i])%b[i];
int g=exgcd(m,b[i],x,y);
int p=b[i]/g;
x=mul(x,c/g,p);
ans+=x*m;
m*=p;
ans=(ans%m+m)%m;
}
return ans;
}
signed main()
{
// ios::sync_with_stdio(false);
cin>>n;
for(int i=1;i<=n;i++) scanf("%lld%lld",&b[i],&a[i]);
cout<<china();
return 0;
}
P4777 【模板】扩展中国剩余定理(EXCRT)
最新推荐文章于 2022-03-05 10:45:10 发布