拓展歐幾裡得演算法及代碼實現

來源:互聯網
上載者:User

標籤:style   blog   http   color   os   art   

擴充歐幾裡得演算法就是求:

      ax + by = gcd(a, b)

的一組整數解(x, y)

一、非遞迴的實現:

首先看a = 60, b = 22的情況:

表格左邊是歐幾裡得演算法,右邊等式計算ax + by = gcd(a, b)的解

a = 2 × b + 16 16 = a - 2b
b = 1 × 16 + 6

6 = b - 1 × 16

   = b - 1 × (a - 2b)

 = -a + 3b

16 = 2 × 6 + 4

4 = 16 - 2 × 6

   = (a - 2b) - 2 × (-a + 3b)

   3a - 8b

6 = 1 × 4 + 2

2 = 6 - 1 × 4

   = (-a + 3b) - 1 × (3a - 8b)

   = -4a + 11b

4 = 2 × 2 + 0  

 

 

 

 

 

 

 

 

 

 

 

這是《數論導引》裡的虛擬碼:

  1. 置x = 1, g = a, v = 0 與 w = b
  2. 如果w = 0,則置y = (g - ax)/b,並傳回值(g, x, y)
  3. g除以w得餘數t,g = qw + t
  4. 置s = x - qv
  5. 置(x, g) = (v, w)
  6. 置(v, w) = (s, t)
  7. 轉到第2步

那麼x是如何計算出來的呢,x是上上次餘數的a的係數減去這次求得的q乘以上次餘數的a的係數

也就是r(n) = r(n-2) - q(n)×r(n-1)    (括弧中的數代表下標)

這句話有點繞,=_=!!。。

再看一般情況的表格:

a = q1b + r1 r1 = a - q1b
b = q2r1 + r2 r2 = b - q2r1
r1 = q3r2 + r3 r3 = r1 - q3r2
…… ……

 

 

 

 

 1 int ex_gcd1(int a, int b, int &x, int &y) 2 { 3     int g, v, w, s, t, q; 4     x = 1; 5     v = 0; 6     g = a; 7     w = b; 8     while(w != 0) 9     {10         q = g / w;11         t = g % w;12         s = x - q*v;13         x = v;14         g = w;15         v = s;16         w = t;17     }18     y = (g - a*x) / b;19     return g;20 }
代碼君

 

二、遞迴方式的實現

令a‘ = a%b, t = a/b, y‘ = y + tx

ax + by = g

ax - tbx + tbx + by = g

(a - tb)x + b(tx + y) = g

a‘x + by‘ = g

by‘ + a‘x = g

y = y‘ - tx,y‘是比y深一度的遞迴的y

 1 int ex_gcd2(int a, int b, int &x, int &y) 2 { 3     if(b == 0) 4     { 5         x = 1; 6         y = 0; 7         return a; 8     } 9     int g = ex_gcd2(b, a%b, y, x);10     y = y - a/b*x;11     return g;12 }
代碼君

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.