如题这里是我的代码
#include <iostream>
#define int long long
#define MAXN 100000
#define QWQ cout << "qwq" << endl;
using namespace std;
int n;
int mul(int n, int m, int M) {
int ans = 0, k = n;
while(m) {
if(m & 1) ans = (ans + k) % M;
k = (k + k) % M, m >>= 1;
}
return ans;
}
int exgcd(int a, int b, int &x, int &y) {
int ret, temp;
if(!b) {
x = 1, y = 0;
return a;
}
else {
ret = exgcd(b, a % b, x, y);
temp = x, x = y, y = temp - a / b * y;
return ret;
}
}
int a[MAXN + 10], m[MAXN + 10];
int excrt() {
int A = a[1], M = m[1];
for(int p = 2; p <= n; p++) {
int P, Q, G = exgcd(M, m[p], P, Q), d = ((a[p] - A) % m[p] + m[p]) % m[p];//here awa
if(d % G != 0) return -1;
P = (mul(P, d / G, m[p] / G) + m[p] / G) % (m[p] / G);
A = M * P + A, M = M / G * m[p];
}
return A;
}
signed main() {
cin >> n;
for(int p = 1; p <= n; p++)
cin >> m[p] >> a[p];
cout << excrt() << endl;
}
这里 ((a[p] - A) % m[p] + m[p]) % m[p] 不太懂为什么 (a[p]−A) 可以这样做。我是这样推导的,布吉岛为什么可以这么干,可能是因为我太逊惹 qaq