显示原始代码
#include <bits/stdc++.h>
using namespace std;
#include <cstdio>
#define inf (1 << 31) - 1
#define N 10
void exgcd(int a, int b, int &x, int &y, int &gcd) {
if (b == 0) {
x = 1;
y = 0;
gcd = a;
return;
}
exgcd(b, a % b, x, y, gcd);
int t = x;
x = y;
y = t - (a / b) * y;
}
int main() {
int T;
scanf("%d", &T);
int opt = 0;
while (T--) {
++opt;
int n, m[N] = { 0 }, a[N] = { 0 };
int m1, m2, a1, a2, x, y, gcd;
scanf("%d", &n);
for (int i = 1; i <= n; ++i) scanf("%d%d", &m[i], &a[i]);
m1 = m[1];
a1 = a[1];
if (n == 1 && a[1] == 0) {
printf("%d\n", m[1]);
continue;
}
bool flag = false;
for (int i = 2; i <= n; ++i) {
a2 = a[i];
m2 = m[i];
exgcd(m1, m2, x, y, gcd);
if ((a2 - a1) % gcd) {
flag = true;
break;
}
int t = m2 / gcd;
x = (x * (a2 - a1)) / gcd;
x = (x % t + t) % t;
a1 = m1 * x + a1;
m1 = (m1 * m2) / gcd;
a1 = (a1 % m1 + m1) % m1;
}
if (flag)
printf("-1\n");
else
printf("%d\n", a1);
}
return 0;
}