版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
const int maxn = 1e5+20;
int n;
ll m[maxn],a[maxn];
ll ex_gcd(ll a,ll b,ll &x,ll &y) {
if(b == 0) {
x = 1;
y = 0;
return a;
}
ll t = ex_gcd(b,a%b,y,x);
y -= a/b*x;
return t;
}
ll solve() {
ll pre_a = a[1],pre_m = m[1];
for(int i = 2;i <= n;i++) {
ll x1,x2;
ll d = ex_gcd(pre_m,m[i],x1,x2);
if((a[i]-pre_a)%d!=0) return -1;
x1 *= (a[i]-pre_a)/d;
ll t = m[i] / d;
x1 = (x1%t+t)%t;
pre_a = pre_a+x1*pre_m;
pre_m = pre_m/d*m[i];
pre_a = pre_a%pre_m;
}
pre_a = (pre_a%pre_m+pre_m)%pre_m;
return pre_a;
}
int main() {
int i;
while(scanf("%d",&n) != EOF) {
for(int i = 1;i <= n;i++) {
scanf("%lld%lld",&m[i],&a[i]);
}
printf("%lld\n",solve());
}
return 0;
}