簡單數論總結2——同余方程與擴展歐幾裏得算法
在上一次總結過後鴿了沒多久其實是快要開學趕緊來肝上兩篇
今日內容——同余方程和擴展歐幾裏得算法
同余
同余的定義:若存在兩個整數a,b,使得(a - b) MOD P為0,則稱作a與b在MOD P的情況下同余
換種通俗的說法,就是,a MOD P與b MOD P相等
記作 \( a\equiv b (mod P) \)
對於整數a,b,c和自然數m,n
同余具有以下性質:
- 自反性:\( a\equiv a (mod P) \)
- 對稱性:若存在\( a\equiv b (mod P) \) ,則 \( b\equiv a (mod P) \)
- 傳遞性:若存在\( a\equiv b (mod P) \) ,\( b\equiv c (mod P) \), 則 \( a\equiv b (mod P) \)
- 同加性:若\( a\equiv b (mod P) \),則 \( (a+c)\equiv (b+c) (mod P) \)
- 同乘性1:若\( a\equiv b (mod P) \),則 \( (a*c)\equiv (b*c) (mod P) \)
- 同乘性2:若\( a\equiv b (mod P) \) , \( c\equiv d (mod P) \),則 \( (a*c)\equiv (b*d) (mod P) \)
- 同冪性:若\( a\equiv b (mod P) \),則 \( (a^c)\equiv (b^c) (mod P) \)
由此,我們可以得到兩條推論
- \( (a*b)mod k = (a mod k)*(b mod k) mod k \)
- 若\( a mod p = x ,a mod q = x,p、q互質,則a mod p*q =x \)
但是,相信像我一樣睿智的你也發現了一個問題,沒錯,同余不滿足同除性,即不滿足若\( a\equiv b (mod P) \),則 \( (a/c)\equiv (b/c) (mod P) \)
那麽除法取模要如何解決呢,禿頂聰明絕頂的數學家也發現了這個問題,利用逆元的知識,我們就可以解決這個問題啦!
但是逆元,我決定下次再講,其實就是鴿了(咕咕咕)
擴展歐幾裏得算法
歐幾裏得算法相信大家都已經知道了QwQ
就是求gcd的輾轉相除法
不知道的可以去看我的上一篇文章(理直氣壯的騙訪問量QwQ)
那麽擴展歐幾裏得算法是啥?(黑人問號.jpg)
擴展歐幾裏得算法就是利用了歐幾裏得算法中叠代的過程,使其能夠求出形如\( ax + by = gcd(a , b) \) 的方程的應用
我們可以簡單的證明和感性理解一下擴展歐幾裏得算法的正確性:
首先,當歐幾裏得算法停止叠代時
有此情況 \( a=1,b=0,此時,gcd(a,b)=x,ax+by = gcd(a,b)顯然成立 \)
在叠代的過程中
有 \( b{x}‘ + (a mod b) {y}‘ = gcd(b, a%b) \)與 \( ax + by = gcd(a, b) \)
則由上一層推出
\( x= {y}‘ \),\( y={x}‘-a/b*{y}‘ \)
於是可推至初始情況,得出解
下面給出代碼的實現
int exgcd (int a, int b, int &x, int &y){ if(b == 0){ x = 1; y = 0; return a; } int ans = exgcd ( b , a % b , x ,y ); int t = x; x = y; y= t - a / b * y; return ans; }
就是這樣喵
對擴展歐幾裏得定理的應用
利用擴展歐幾裏得定理,我們能夠求解形如\( ax+by = c \)的問題
當 \(c \mid gcd(a,b) \)時,有\( ax+by = c \)的不定方程有整數解
所以,把原式變形為 \( ax+by = d (d = gcd(a,b) ) \)的形式,利用擴展歐幾裏得定理可解出方程的一組解\( (x,y) \),再將其乘以 \( \frac{c} {gcd(a,b)} \)
就能解出原方程的解啦!(快誇我.jpg)
對擴展歐幾裏得定理求出解的處理
由於形如 \( ax+by = c \) 的線性不定方程有無窮多解,擴展歐幾裏得定理進行求解的過程中,不一定保證求出的是最小正整數解,為得到最小正整數解,我們有如下的方式
易推出,對於線性不定方程 \( ax+by = c \),有一組解\(x,y\) 與另一組解 \( a*(x + \frac {a*t} {gcd(a,b)}) ,b*(y- \frac {b*t} {gcd(a,b)} | (t\in \mathbb{Z})) \)都為原方程的解
則可得出方法:對於線性不定方程 \(ax+by = c \) ,其最小正整數解為( \( x= ( (x\%t)+t)\%t) ,(t=b/gcd(a,b))\),\( y=(((y\%t)+t)\%t) ,(t=a/gcd(a,b)) \) )
至此,問題得到了解決
簡單數論總結2——同余方程與擴展歐幾裏得算法