#include <cstdio>
#define int long long int
const int N = 1e5, inf = 1e18;
int n;
int a[N], p[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, y, x);
y -= a / b * x;
return d;
}
int solution(int a, int b, int c, int &x, int &y) {
int x0, y0;
bool flagx = 0, flagy = 0;
if (a < 0) a *= -1, flagx = 1;
if (b < 0) b *= -1, flagy = 1;
int d = exgcd(a, b, x0, y0);
if (flagx) x *= -1;
if (flagy) y *= -1;
if (c % d) return 0;
x = x0 * (c / d), y = y0 * (c / d);
return d;
}
int exCRT(int n, int a[], int p[]) {
int p0 = p[1], a0 = a[1];
for (int i = 2; i <= n; i++) {
int k0, k;
int gcd = solution(p0, p[i], a[i] - a0, k0, k);
if (!gcd) return -1;
int d = p[i] / gcd;
k0 %= d;
a0 = k0 * p0 + a0;
p0 = p0 * d;
a0 = (a0 % p0 + p0) % p0;
}
return a0;
}
signed main() {
scanf("%lld", &n);
for (int i = 1; i <= n; i++) {
scanf("%lld %lld", &p[i], &a[i]);
a[i] %= p[i];
}
int x = exCRT(n, a, p);
printf("%lld\n", x);
return 0;
}
为啥又WA又RE(
https://www.luogu.com.cn/record/170246947