「Note」欧几里得算法(扩展与非拓展)

一,欧几里得算法

1. 结论

\(\gcd (a, b) = \gcd (b, a \mod b)\)

2. 证明

先假设 \(a > b\)\(a = bx+y\),其中 \(x = \lfloor\frac{a}{b}\rfloor, 0 \le y \lt b\)
也就是 \(b\) 除以 \(a\) 等于 \(x\)\(y\)
原命题就是 \(\gcd (a, b) = \gcd (y, b)\)

\(a = bx + y\) 可以得到 \(y = bx - a\),由于 \(\gcd (a, b)\) 必定是 \(a, b\) 的因数,所以 \(\gcd (a, b)\) 也是 \(y\) 的因数。

按照上面的方法,我们发现 \(\gcd (y, b)\)\(y\)\(b\) 的因数,由 \(a = bx+y\) 得知它也是 \(a\) 的因数。

整理所有信息。

  • \(\gcd (a, b)\)\(a, b\) 的最大公因数。
  • \(\gcd (y, b)\)\(a, b\) 的公因数。
  • \(\gcd (y, b)\)\(y, b\) 的最大公因数。
  • \(\gcd (a, b)\)\(y, b\) 的公因数。

因为最大公因数大于等于所有因数,我们知道 \(\gcd (y, b) \le \gcd (a, b)\)\(\gcd (a, b) \le \gcd (y, b)\)。所以两数相等,命题得证。

二、扩展欧几里得算法

1. 用处

求任意关于 \(x, y\) 的二元一次不定方程 \(ax + by = c\) 的解。

2. 推导

i. 求 \(ax + by = \gcd (a, b)\)

由裴蜀定理,\(ax + by = \gcd (a, b)\)
运用欧几里得定理,替换得 \(bx + (a\mod b)y = \gcd (b, a \mod b)\)
由取余的性质,\(bx + (a - \lfloor\frac{a}{b}\rfloor b)y = \gcd (b, a \mod b)\)
整理式子, \(ay - bx - \lfloor\frac{a}{b}\rfloor by = \gcd (b, a \mod b)\)
提取 \(-b\),得 \(ay - b(x - \lfloor\frac{a}{b}\rfloor y) = \gcd (b, a \mod b)\)
所以可以令新的 \(x, y\)\(x_1, y_1\),旧的为 \(x_0, y_0\)
\(x_1 = y_0\)\(y_1 = x_0 - \lfloor\frac{a}{b}\rfloor y_0\)
继续迭代,当迭代 \(n\) 次后,\(b = 0\) 时,显然可以令 \(x_n=1\)\(y_n\) 为任意值。
重新递归上来,得到方程组的一组特解。

要求通解,根据线性性,只需要找到一组绝对值最小的 \(d_x, d_y\),使得 \(x + d_x\)\(y + d_y\) 代入到原方程仍然成立就可以了。

所以 \(ax + by = ax + by + ad_x + bd_y\),需要让 \(ad_x = -bd_y\)
要让绝对值最小,\(d_x = \frac{b}{\gcd(a,b)}\)\(d_y = -\frac{a}{\gcd(a,b)}\)

ii. 求 \(ax + by = c\) 的解

根据裴蜀定理,无解的情况为 \(c\) 不是 \(\gcd (a, b)\) 的倍数。
否则显然可以令 \(g = \frac{c}{\gcd (a, b)}\),两边同时除以 \(g\) 可得 (i)。

posted @ 2025-01-14 14:42  棉裤Manki  阅读(21)  评论(0)    收藏  举报