题意:
n个数(10),每行给出 mi 和 ai。
代表 X % mi = ai。
然后求这个X。
解析:
中国剩余定理。
代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <stack>
#include <vector>
#include <queue>
#include <map>
#include <climits>
#include <cassert>
#define LL long long
using namespace std;
const int inf = 0x3f3f3f3f;
const double eps = 1e-8;
const double pi = 4 * atan(1.0);
const double ee = exp(1.0);
const int maxn = 30 + 10;
void exgcd(LL a, LL b, LL& d, LL& x, LL& y)
{
if (b == 0)
{
d = a;
x = 1;
y = 0;
}
else
{
exgcd(b, a % b, d, y, x);
y -= a / b * x;
}
}
LL a[maxn], m[maxn], M;
LL CRT(int r)
{
M = 1;
LL res = 0;
for (int i = 1; i <= r; i++)
{
M *= m[i];
}
for (int i = 1; i <= r; i++)
{
LL Mi = M / m[i];
LL d, x, y;
exgcd(Mi, m[i], d, x, y);
res = (res + Mi * x * a[i]) % M;
}
if (res < 0)
res += M;
return res;
}
int main()
{
#ifdef LOCAL
freopen("in.txt", "r", stdin);
#endif // LOCAL
int n;
while (scanf("%d", &n) != EOF)
{
for (int i = 1; i <= n; i++)
{
scanf("%I64d%I64d", &m[i], &a[i]);
}
LL ans = CRT(n);
printf("%I64d\n", ans);
}
return 0;
}