拓展欧几里得模板/求逆元模板(java)
生活随笔
收集整理的這篇文章主要介紹了
拓展欧几里得模板/求逆元模板(java)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
拓展歐幾里得模板
參考:哈爾濱理工大學ACM培訓資料匯編/ACM-ICPC培訓資料匯編*
基本原理 :設 a 和 b 不全為 0,則存在整數 x,y 使得 xa yb=gcd(a,b)=c
對于輾轉相除法的最后一項 此時 b=0,則 gcd(a,b)=1a 0b,(這個a,b是經過gcd的最后一項a,b)
- 因為gcd(a,b)=gcd(b,a%b)
- 則有x *a y *b=x1 *b y1 * (a%b) 將等式右邊變形,
b *x1 (a%b) *y1=b *x1 (a-(a/b) *b) *y1=a *y1 b *(x1-(a/b) *y1) - 則,x=y1,y=x1-(a/b) *y1 則可由后向前迭代得到 x,y
- 解題思路 對于擴展歐幾里德定理的題,一般都需要進行一定的推導之后得到一個形式為 xa yb=c 的方程,然后根據 c 確定解是否存在,如果 c 可以被 gcd(a,b)整除,那么方程有 解,否則方程無解。而且所得的解是不唯一的,對于一組解 x0,y0 則其所有解可以表示為 x=x0 b/gcd(a,b)*t,y=y0-a/gcd(a,b)*t,t=0, 1, 2……一般會要求找出 x 或者 y 的最小正整數 解,這個時候需要做一些調整。
- 總的來說。遞歸是一來一回的過程,在gcd中,我們只用到了去的過程,求的最大公約數,而在exgcd中,我們發現了在來的過程中,某些數按照一定的規則變化,可以得到我們想要的結果而已。
求逆元:
從拓展歐幾里得中知道可以求ax by=c,一般是解決這類問題
當a,b互質時候。c一定等于1.因為gcd(a,b)=1,c必須被gcd整除,那么如果有解一定是1.
那么ax by=1.
求逆元一般形式(求a關于1mod m的逆元)
ax≡1 (mod m). x就是所求的逆元
變形為 ax bm=1
這樣就可以運用拓展歐幾里得(但是x要大于0處理)
還有用小費馬可以求逆元,就不介紹了。
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的拓展欧几里得模板/求逆元模板(java)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 快速幂模板(java)
- 下一篇: 矩阵快速幂求大斐波那契poj3070(j