一个正整数K,给出K Mod 一些质数的结果,求符合条件的最小的K。例如,K % 2 = 1, K % 3 = 2, K % 5 = 3。符合条件的最小的K = 23。
Input
第1行:1个数N表示后面输入的质数及模的数量。(2 <= N <= 10) 第2 - N + 1行,每行2个数P和M,中间用空格分隔,P是质数,M是K % P的结果。(2 <= P <= 100, 0 <= K < P)
Output
输出符合条件的最小的K。数据中所有K均小于10^9。
Input示例
3 2 1 3 2 5 3
Output示例
23
中国剩余定理的模板题目.....
代码如下:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
const int maxn=15;
int n;
typedef long long ll;
ll m[maxn],a[maxn];
void Extend (ll A,ll B,ll& X,ll& Y)
{
if(B==0)
{
X=1; Y=0;
}
else
{
Extend(B,A%B,X,Y);
ll temp=X;
X=Y;
Y=temp-A/B*Y;
}
}
void Solve ()
{
ll M=1;
ll ans=0;
for (int i=0;i<n;i++)
M*=m[i];
for (int i=0;i<n;i++)
{
ll temp=M/m[i];
ll x,y;
Extend(temp,m[i],x,y);
ans=(ans+x*a[i]*temp)%M;
}
printf("%lld\n",(ans+M)%M);
}
int main()
{
scanf("%d",&n);
for (int i=0;i<n;i++)
{
scanf("%lld%lld",&m[i],&a[i]);
}
Solve();
return 0;
}