51nod 1079 中國剩餘定理 模板
阿新 • • 發佈:2018-11-01
一個正整數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; }