AcWing 223. 阿九大战朱最学
原题链接
简单
作者:
Air_45
,
2025-01-16 23:09:57
,
所有人可见
,
阅读 8
#include <iostream>
#include <vector>
using namespace std;
vector<long long> a;
vector<long long> b;
long long exgcd(long long a, long long b, long long& x, long long& y) {
if (b == 0) {
x = 1,y = 0;
return a;
}
int d=exgcd(b, a % b, y, x);
y -= (a / b) * x;
return d;
}
long long CRT(int n, vector<long long> a, vector<long long> b) {
long long M = 1;
for (int i=0;i<a.size();i++) {
M *= a[i];
}
long long x = 0;
for (int i = 0; i < n; ++i) {
long long Mi = M / a[i];
long long Mi_ni, _;
long long d=exgcd(Mi, a[i], Mi_ni, _);
x += b[i] * Mi * Mi_ni;
}
return (x % M + M) % M;
}
int main() {
int n;
cin >> n;
for (int i = 1; i <= n; ++i) {
int a_,b_;
cin >> a_ >> b_;
a.push_back(a_);
b.push_back(b_);
}
cout << CRT(n, a, b) << endl;
return 0;
}