题目描述
解题思路
中国剩余定理的模板题。。
参考代码
#include<iostream>
using namespace std;
typedef __int64 ll;
const int maxn = 1010;
ll a[maxn],b[maxn];
ll extended_euclid(ll a, ll b, ll &x, ll &y)
{
ll d;
if(b == 0)
{x = 1; y = 0; return a;}
d = extended_euclid(b, a%b, y, x);
y -= a/b*x;
return d;
}
ll chinese_remainder(int len)
{
ll i, d, x, y, m, n, ret;
ret = 0; n = 1;
for(i=0; i < len ;i++) n *= a[i];
for(i=0; i < len ;i++) {
m = n / a[i];
d = extended_euclid(a[i], m, x, y);
ret = (ret + y*m*b[i]) % n;
}
return (n + ret%n) % n;
}
int main()
{
int n,i;
while (~scanf("%d",&n)){
for(i = 0;i < n;i++)
scanf("%I64d %I64d",&a[i],&b[i]);
printf("%I64d\n",chinese_remainder(n));
}
return 0;
}