また、中国の剰余定理として知られている中国の剰余定理は、(名前、ああは何ですか)メソッドの合同グループ(合同を参照)古代中国を解決することです。数論が重要な定理です。まず、少し聞かせて!ケース!タイトル!今すぐ!
注:三つの数abcの、残りは今年の残りのために計算されたM1のM2 M3、%であった、&& 「と」オペレータです。
1 はそれぞれ、2つの数が割り切れること、および最小数は3分の1以上で割り切れる満たすことができる見つけます。
K1の%のB%C K1 == == 0 &&%のA == K1 1 、
K2%%のK2 == Cの== 0 &&%のB == K2 1 、
K3%%B K3 == == 0 && %C == K3 1 ;
2 、デジタル乗算器Iプラスアップに対応する3つの未知数は、得られた結果の最小公倍数の三即ち整数倍の数を引きます。
答え = M1 + K2×M2 + K3×K1×M3 - P×(C×A×B);
Pが回答を満たす > ;最大整数0
または応答 =(K1×M1 + K2×M2 + K3×M3)を%(C×B×) 。
少し波を証明してみましょう
M2 = M1が設定* M * ... Mnの
ミ = M / MI
逆元ミミセット ^( - 1 )(MODをMI)
有するミ *ミ^( - 1)≡ 1 (MI MOD )
AI *ミ*ミ^( - 1 )≡ai(MI MOD)
Iと等しくないすべてのjに対して
AI *ミ*ミ^( - 1)≡ 0 (MJ MOD)
そう答えであること、すべてのAI *ミ*ミ^ ( - 1)(P MOD)値
1 #include<bits/stdc++.h> 2 using namespace std; 3 long long x,y; 4 long long a[15],b[15]; 5 long long n; 6 void exgcd(long long A,long long B) 7 { 8 if(B==0) 9 { 10 x=1; 11 y=0; 12 return; 13 } 14 exgcd(B,A%B); 15 long long z=x; 16 x=y; 17 y=z-(A/B)*y; 18 } 19 long long fast(long long a1,long long b1,long long mod) 20 { 21 long long ans=0; 22 a1%=mod; 23 b1%=mod; 24 while(b1) 25 { 26 if(b1&1) 27 { 28 ans=(ans+a1)%mod; 29 } 30 b1>>=1; 31 a1=(a1+a1)%mod; 32 } 33 return ans; 34 } 35 long long china() 36 { 37 long long ans=0; 38 long long M=1; 39 for(long long i=1;i<=n;i++) 40 M*=b[i]; 41 for(long long i=1;i<=n;i++) 42 { 43 long long m=M/b[i]; 44 exgcd(m,b[i]); 45 while(x<0) 46 x+=b[i]; 47 x%=b[i]; 48 ans=(ans+fast(x,fast(m,(a[i]+M)%M,M),M)+M)%M; 49 } 50 return ans; 51 } 52 int main() 53 { 54 cin>>n; 55 for(long long i=1;i<=n;i++) 56 { 57 scanf("%lld",&a[i]); 58 } 59 for(long long i=1;i<=n;i++) 60 { 61 scanf("%lld",&b[i]); 62 } 63 cout<<china(); 64 return 0; 65 }