显示代码纯文本
#include <iostream>
#define ll long long
using namespace std;
long long x1, a1, m1, a2, m2, a3, m3, n;
long long myabs(ll a);
ll exgcd(ll a, ll b, ll &x1, ll &y1){
if(b == 0){
x1 = 1, y1 = 0;
return a;
}
ll ans = exgcd(b, a % b, x1, y1);
ll t = x1;
x1 = y1;
y1 = t - a / b * y1;
return ans;
}
int main() {
cin >> n;
cin >> m1 >> a1;
for(int i = 2; i <= n; i++){
cin >> m2 >> a2;
long long k1, k2;
long long d = exgcd(m1, m2, k1, k2);
if(myabs(a2 - a1) % d) {
cout << "-1" << endl;
return 0;
}
k1 *= (a2 - a1) / d;
long long M = m2 / d;
k1 = (k1 % M + M) % M;
long long t = m1 * m2 / d;
a1 = (k1 * m1 + a1) % t, m1 = t;
}
cout << (a1 % m1 + m1) % m1 << endl;
return 0;
}
long long myabs(ll a) {
if(a < 0) return -a;
else return a;
}