「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)。

浙公网安备 33010602011771号