日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[数论]拓展中国剩余定理

發布時間:2024/9/5 编程问答 82 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [数论]拓展中国剩余定理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

拓展中國剩余定理

?拓展中國剩余定理

拓展中國剩余定理是用來解同余方程

$\begin{cases}x\equiv c_{1}\left( mod\ m_{1}\right) \\ x\equiv c_{2}\left( mod\ m_{2}\right) \\ \ldots \\ x\equiv c_n\left( mod\ m_n\right) \end{cases}$

ps.如果m1,m2,m3...mn兩兩互素的話,可以用中國剩余定理來求

?過程

假設

$x\equiv c_{1} (mod \ m_{1})$? ①

$x\equiv c_{1} (mod \ m_{2})$? ②

$x=c_{1}+m_{1}k_{1}$? ③

$x=c_{2}+m_{1}k_{2}$? ④

③=④得? $m_{1}k_{1}=c_{2}-c_{1}+m_{2}k_{2}$? ⑤

設$t=gcd(m1,m2)$

⑤ 兩邊同時除以t 得

$\frac{m_{1}k_{1}}{t}=\frac{c_{2}-c_{1}}{t}+\frac{m_{2}k_{2}}{t}$ ⑥

⑥ $mod \? \frac{m_{2}}{t}$得

$k_{1}\frac{m_{1}}{t}\equiv?\frac{c_{2}-c_{1}}{t}(mod \? \frac{m_{2}}{t})$ ⑦

則$k_{1}=inv(\frac{m_{1}}{t},\frac{m_{2}}{t})\cdot \frac{c_{2}-c_{1}}{t}+\frac{m_{2}}{t}\cdot y$⑧

將⑧代入①

$x=inv(\frac{m_{1}}{t},\frac{m_{2}}{t})\cdot \frac{c_{2}-c_{1}}{t}\cdot m_{1}+\frac{m_{1}m_{2}}{t}y+c_{1}$

則$x\equiv inv(\frac{m_{1}}{t},\frac{m_{2}}{t})\cdot \frac{c_{2}-c_{1}}{t}\cdot m_{1}+c_{1}(mod \ \frac{m_{1}m_{2}}{t})$

可以看出,x的值與$\frac{c_{2}-c_{1}}{t}$有關

所以,當$(c_{2}-c_{1})|gcd(m_{1},m_{2})$時,x有解

若化成 $x\equiv c (mod \ m)$

則$m=\frac{c_{2}-c_{1}}{t}$

$c=inv(\frac{m_{1}}{t},\frac{m_{2}}{t})\cdot \frac{c_{2}-c_{1}}{t}$%$\frac{m_{2}}{t}\cdot m_{1}+c_{1}$

?結論

通過中國剩余定理可以把兩個同余式轉化成一個新的同余式式

那推廣一下n個同余式合并,

兩個同余式求解之后得到一個新的同余式

再把新的同余式和其他的聯立

最終就可以求出滿足條件的解

?模板

1 #include<cstdio> 2 using namespace std; 3 typedef long long ll; 4 ll n; 5 ll a[100010],b[100010]; 6 ll mul(ll A,ll B,ll mod) //快速乘取余 模板 7 { 8 ll ans=0; 9 while(B>0) 10 { 11 if(B & 1) ans=(ans+A%mod)%mod; 12 A=(A+A)%mod; 13 B>>=1; 14 } 15 return ans; 16 } 17 ll exgcd(ll A,ll B,ll &x,ll &y) //擴展歐幾里得 模板 18 { 19 if(!B) 20 { 21 x=1,y=0; 22 return A; 23 } 24 ll d=exgcd(B,A%B,x,y); 25 ll tmp=x; 26 x=y , y=tmp-A/B*y; 27 return d; 28 } 29 ll lcm(ll A,ll B) //求最小公倍數 30 { 31 ll xxx,yyy; 32 ll g=exgcd(A,B,xxx,yyy); 33 return (A/g*B); 34 } 35 ll excrt() //重點:求解同余方程組 36 { 37 ll x,y; 38 ll M=b[1],ans=a[1]; //賦初值 39 //M為前k-1個數的最小公倍數,ans為前k-1個方程的通解 40 for(int i=2;i<=n;i++) 41 { 42 ll A=M,B=b[i]; 43 ll C=(a[i]-ans%B+B)%B; //代表同余方程 ax≡c(mod b) 中a,b,c 44 45 ll g=exgcd(A,B,x,y); 46 //求得A,B的最大公約數,與同余方程ax≡gcd(a,b)(mod b)的解, 47 48 if(C%g) return -1; //無解的情況 49 50 x=mul(x,C/g,B); //求得x的值,x即t 51 ans+=x*M; //獲得前k個方程的通解 52 M=lcm(M,B); //更改M的值 53 ans=(ans%M+M)%M; 54 } 55 return ans; 56 } 57 int main() 58 { 59 scanf("%lld",&n); 60 for(int i=1;i<=n;i++) 61 scanf("%lld%lld",&b[i],&a[i]); 62 ll ans=excrt(); 63 printf("%lld",ans); 64 } View Code

?

轉載于:https://www.cnblogs.com/MMMinoz/p/11385728.html

總結

以上是生活随笔為你收集整理的[数论]拓展中国剩余定理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。