链接
题目描述
给出n个形同x ≡ ai(mod mi)的方程,保证mi互质的情况下,求出最小的x
样例输入
3
3 1
5 1
7 2
样例输出
16
思路
很明显,从名字都看得出来
中国剩余定理(crt)
其实在我的一些数论知识的博客里有
这里就不过多赘述了
这里用扩欧来求逆元
代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define ll long long
using namespace std;
ll n, Ans;
ll a[1000005], b[1000005], A[1000005];
void exgcd(ll a, ll b, ll &x, ll &y)
{
if(b == 0) {
x = 1; y = 0;
return;
}
exgcd(b, a % b, x, y);
ll z = x; x = y; y = z - y * (a / b);
}
int main()
{
A[0] = 1;
scanf("%lld", &n);
for(int i = 1; i <= n; ++i) {
scanf("%lld%lld", &a[i], &b[i]);
A[0] *= a[i];
}
for(int i = 1; i <= n; ++i)
{
A[i] = A[0] / a[i];
ll x = 0, y = 0;
exgcd(A[i], a[i], x, y);
if(x <= 0) x += a[i];
Ans += b[i] * A[i] * x;
}
printf("%lld", Ans % A[0]);
return 0;
}