题意:
给定2n个整数a1,a2,…,an和m1,m2,…,mn,求一个最小的非负整数x
满足∀i∈[1,n],x≡mi(mod ai)。
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
int n;
ll ffabs(ll x){
if(x>=0) return x;
else return -x;
}
ll exgcd(ll a,ll b,ll &x,ll& y)
{
if(!b){
x=1,y=0;
return a;
}
ll d=exgcd(b,a%b,y,x);
y-=a/b*x;
return d;
}
int main()
{
while(cin>>n)
{
ll a1,m1;
cin>>a1>>m1;
n--;
bool ok=true;
while(n--)
{
ll a2,m2,k1,k2;
cin>>a2>>m2;
int d=exgcd(a1,a2,k1,k2);
if((m2-m1)%d){
ok=false;
break;
}
k1*=((m2-m1)/d);
ll t=a2/d;
k1=(k1%t+t)%t;
m1=m1+k1*a1;
a1=ffabs(a1/d*a2);
}
if(ok) cout<<(m1%a1+a1)%a1<<endl;
else cout<<"-1"<<endl;
}
return 0;
}