Re: [問題] 關於擴展歐幾里得算法

作者: LPH66 (-6.2598534e+18f)   2020-02-02 01:29:50
※ 引述《nevikw39 (☆牜攵☆犬羊)》之銘言:
: 大家安安 o'_'o
: 最近在學習線性同餘方程,不太了解所謂擴展歐幾里得算法的過程。
: 以前學過一般歐幾里得法 aka 輾轉相除法,現在這個擴展推廣我明白所求是解出 a * x + b * y = gcd(a, b)。
: 以下是我根據網路查出的寫法:
: int exgcd(int a, int b, int &x, int &y)
: {
: if (!b)
: {
: x = 1;
: y = 0;
: return a;
: }
: int g = exgcd(b, a % b, y, x);
: y -= a / b * x;
: return g;
: }
: if 內的敘述我可以理解:當 b = 0 時 gcd(a, b) = a,此時 a*1 + b*0 = gcd(a, b)
: if 後的部分我就不太懂惹,如果算出 b*y' + (a%b)*x' = gcd(a, b),則如何求出
: a * _ + b * _ = gcd(a, b) ??
: y -= a / b * x 的意義是什麼呢??
: 感謝大家
a 除以 b 的商為 a / b, 餘為 a % b (這裡我把 / 當成整數除法)
也就是說我們有 a % b = a - (a / b) * b (餘數 = 被除數 - 商 * 除數)
那麼代入 gcd(a, b) = b*y' + (a%b)*x'
= b*y' + [a - (a/b) * b]*x'
= b*y' + a*x' - (a/b)*b*x'
= a*x' + b*(y' - (a/b)*x)
﹌﹌﹌↑﹌﹌﹌
這就是新的 y 了
作者: nevikw39 (牧)   2020-02-02 12:20:00
感謝大大點醒我!!

Links booklink

Contact Us: admin [ a t ] ucptt.com