裴蜀定理與乘法逆元

轉載請說明出處:http://blog.csdn.net/leader_one/article/details/75298966

說在前面

出於尊重,還是先簡介一下裴蜀:。。。。。。好吧,網上並沒有什麼關於 艾蒂安·裴蜀 的個人簡介。
爲什麼把裴蜀定理和乘法逆元放在一起講呢? 因爲二者之間有非常微妙的關係,裴蜀定理說明了兩數不互質(a,m不互質)的情況下,a是沒有關於m的乘法逆元的(a*x ≡ 1 mod m 不存在的)。好了,下文再詳細解釋。


裴蜀定理

簡介裴蜀定理
裴蜀定理(Bézout’s identity)得名於法國數學家艾蒂安·裴蜀,說明了對任何整數a、b和它們的最大公約數d,關於未知數x和y的線性不定方程(稱爲裴蜀等式 ax+by = z):若a,b是整數,且gcd(a,b)=d,那麼對於任意的整數x,y,ax+by都一定是d的倍數,特別地,一定存在整數x,y,使ax+by=d成立。
它的一個重要推論是:a,b互質的充要條件是存在整數x,y使ax+by=1
是不是性能強勁?(可以先自行思考一下與乘法逆元的關係,下文會講解)


算法實現
別逗了吧,這是一個數學定理,直接用於思考就行,哪來的算法實現?


證明
裴蜀定理:若ax+by = z,則 gcd(a,b)| z
再順手證明一下裴蜀定理:
設k = gcd(a,b),則 k | a, k | b,根據整除的性質,有 k | (ax+by)
設 s爲ax+by的最小正數值
再設 q = [a / s](a整除s的值);r = a mod s = a-q(ax+by) = a(1 - qx)+b(-qy);
由此可見r也爲a,b的線性組合;(ax+by稱爲a,b的線性組合)
又因爲s爲a,b的線性組合的最小正數值,0<= r < s,所以r的值爲0,即 a mod s = r =0;s | a;
同理可得 s | b,則 s | k;
又因爲 k | (ax+by),s爲ax+by的最小正數值,所以 k | s;
因爲 s | k,k | s,所以s = k;
原命題得證。
(這應該是裴蜀定理最簡單的證明方法了)


關於N個數的拓展
以上是關於兩個數a,b的,那有沒有關於一堆數的呢?答案是有。
設a1,a2,a3……an爲n個整數,d是它們的最大公約數,那麼存在整數x1……xn使得x1 * a1+x2* a2+…xn* an=d
順手再證明一下:
首先,d已經有了,則d | a1…..an,依舊設 s 爲x1 * a1+x2* a2+…xn* an=d 的最小正整數值
再設 q = [a1 / s](a整除s的值);r = a1 mod s = a1-q(a1*x1+……+an * xn) = a1(1 - q * x1)+……+an(-q * xn);
由此可見r也爲a1……an的線性組合;
又因爲s爲a1……an的線性組合的最小正數值,0<= r < s,所以r的值爲0,即 a1 mod s = r =0;s | a1;
同理可得 s | a2……an,則 s | d;
又因爲 d | (a1 * x1+……an * xn),s爲線性組合的最小正數值,所以 d | s;
因爲 s | d,d | s,所以s = d;
原命題得證。
證明方法與上面類似。


推論

  1. a,b互質的充要條件是存在整數x,y使ax+by=1
  2. 如果a1…an互質(不是兩兩互質),那麼存在整數x1……xn使得x1* a1+x2* a2+…xn*an=1,反過來一樣
  3. 方程 ax + by = 1 有解當且僅當整數a和b互質
  4. 一堆數情況的類同

乘法逆元

好了,輪到乘法逆元了,不知道機智的看客們有沒有發現裴蜀定理與乘法逆元的關係,即a,m不互質時沒有a關於m的乘法逆元,裴蜀定理有解釋(肯定還有人不知道什麼是乘法逆元)
簡介乘法逆元
若有 a*x ≡ 1 (mod m),則稱 x 爲a關於m的乘法逆元,等價式 a * x+m * y = 1
當a,m不互質時,是沒有解的,即乘法逆元不存在(還是裴蜀定理)


如何求解乘法逆元
經觀察我們可以發現,a * x+m * y = 1 是一個二元一次方程
那麼就很顯然了,可以通過擴展歐幾里得算法求解(不會擴展歐幾里得算法的點這裏
其實還有一個很神奇的東西叫做歐拉定理(講解鏈接),它可以直接算出乘法逆元
(求解乘法逆元的前提是乘法逆元存在)


乘法逆元的作用
求解出了乘法逆元之後,它有什麼用呢?答案是帶除號的取模,即分數取模 (a / b) mod m
若a可以被b整除還好,直接算,但是數要是很大。。。
但是這一切問題有了乘法逆元都不存在了
設x爲b關於m的乘法逆元,那麼我們有a * x ≡(a / b) mod m
先來一個簡單的證明:
首先(a/b) * 1 ≡(a/b) mod m是成立的,
然而 b * x ≡ 1 mod m,
所以有(a / b) * (b * x)≡ (a/b) mod m,
化簡一下就有了 a * x ≡ (a/b) mod m
這樣是不是分數取模問題就迎刃而解了。


按照慣例再說兩句

本人蒟蒻一枚,博客難免有誤,發現錯誤的大牛牪犇可以發私信聯繫本人指正錯誤。另外本博客可能會更新,可以考慮收藏一下。
好了,暫時就講這麼多了,如果絕對這裏講解得不夠詳細,也可以私信聯繫本人交流一下。
歡迎轉載,轉載請說明出處,謝謝。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章