浅谈欧几里得算法
(觉得自己快没了,赶紧完成想做的事)
最大公约数是数论中很常见的一个知识。本文将从数学和信息学两个方面简单谈一下它。
带余数除法
定理1.1(带余数除法) 设$a, b$是两个给定整数,且$a \neq 0$,那么一定存在唯一的一对整数$q$和$r$,满足:
$b = qa + r, \ \ \ \left(0\leqslant r < \left | a \right |\right)$
此外,$a\mid b$的充分必要条件是$r = 0$。
证明 存在性 当$a \mid b$的时候,取$q = b / a, r = 0$即可。考虑$a \nmid b$的时候。
设$T = \left \{ b - ka :k\in \mathbb{Z} \right \}$。因为$a \neq 0$,所以不等式$b - ka > 0$总是有整数解的。根据最小自然数原理可知,必然存在最小的正整数$t_{0} = b - k_{0}a \in T$
若$t_{0} < \left | a \right |$,则取$q = k_{0}, r = t_{0}$。否则有$t_{0} > \left | a \right |$,考虑$t_{0} - \left | a \right |$,由$T$的定义知$t_{0} - \left | a \right |\in T$,再由$t_{0} > \left | a \right |$可知$t_{0} - \left | a \right | > 0$,因此$t_{0} - \left | a \right |$是正整数,又因为$a \neq 0$,所以$t_{0} - \left | a \right | < t_{0}$与$t_{0}$的最小性矛盾。因此必有$t_{0} < \left | a \right |$。
唯一性 假设还存在一对整数$q'$和$r'$满足$b = q'a + r', \ \ \ \left(0\leqslant r' < \left | a \right |\right)$。若$q = q'$,则可以推出$r = r'$,因此$q \neq q'$。联立等式有$qa + r = q'a + r'$。移项得$(q - q')a = r - r'$,假设$r > r'$,则有$r - r' \geqslant a$,显然这是不可能的。所以唯一性得证。
然后来证明一下最后那一句话。充分性由整除定义可证。考虑必要性,因为$a\mid b$,所以$a\mid b - qa = r$,再由$0\leqslant r < \left | a \right |$,可知$r = 0$。
(虽然它很显然,但是很有必要证明一下)
带余数除法的一个重要的推广莫过于就是辗转相除法,也称Euclid算法。它不仅在理论中有很大的价值,而且在应用中也有举足轻重的地位。
辗转相除法 设$u_{0}, u_{1}$是两个给定整数,且$u_{1}\neq 0$。重复使用带余数除法可以得到下面若干等式:
$\begin{matrix}u_{0} = q_{0}u_{1} + u_{2}\ \ \ \ \ \ \ \ &0 < u_{2} < \left | u_{1} \right | \\ u_{1} = q_{1}u_{2} + u_{3}\ \ \ \ \ \ \ \ &0 < u_{3} < u_{2}\\ u_{2} = q_{2}u_{3} + u_{4}\ \ \ \ \ \ \ \ &0 < u_{4} < u_{3} \\ \cdots & \cdots\\ u_{k - 1} = q_{k - 1}u_{k} + u_{k + 1} & 0 < u_{k + 1} < u_{k} \\u_{k} = q_{k}u_{k + 1}\ \ \ \ \ \ \ \ \ \ \ \ \end{matrix}$
用程序写,就是:
1 int gcd(int a, int b) { 2 return (b) ? (a) : (gcd(b, a % b)); 3 }
那么它能做什么?
引理1.2 (1)$(a, b) = (a, b - a)$(2)设$b = qa + r, 0\leqslant r < \left| a \right|$,(a, b) = (b, r)。
证明 (1)设$d \mid a$且$d \mid b$,则$d \mid b - a$。
设$d \mid b - a$且$d \mid a$,则$d \mid b$。
因此$a,b$的公约数集合与$a, b - a$的公约数集合相同。
由定义可知$(a, b) = (a, b - a)$。
(2)由(1)易证。
定理1.3 在辗转相除法中,$u_{k + 1} = (u_{0}, u_{1})$。
证明 由引理1.2易证。
于是它可以用来求两个数的最大公约数,如果把它推广到求多个数的最大公约数还需要一些数学定理。
最大公约数理论
定理2.1 $a_{i}\mid c$的充分必要条件是$[a_{1}, a_{2}, \cdots, a_{k}]\mid c$。
定理2.2 设$D$为正整数,那么$D = (a_{1}, a_{2}, \cdots, a_{k})$的充分必要条件是$D\mid a_{i}$且对于任意满足$d\mid a_{i}$的$d$,则有$d\mid D$。
定理2.3 $(a_{1}, a_{2}, \cdots, a_{k}) = ((a_{1}, a_{2}), a_{3}, \cdots, a_{k})$。
定理2.4 设$a_{1}, a_{2}, \cdots, a_{k}$是不全为0的整数。则$(a_{1}, a_{2}, \cdots, a_{k}) = \min\left \{s = a_{1}x_{1} + a_{2}x_{2} + \cdots + a_{k}x_{k}:x_{i}\in \mathbb{Z}\wedge s > 0\right \}$。
定理2.5 若$(a, b) = 1, a\mid mb$,则$a\mid m$。
定理2.6 若正整数$m\mid a_{i}, i = 1, 2, \cdots, k$, $(a_{1}/m, a_{2}/m, \cdots, a_{k}/m) = ((a_{1}, a_{2}), a_{3}, \cdots, a_{k})/m$。
(注:《初等数论》上,此章有8个定理,这里只选取与本文有关的6个定理)
定理2.1的证明 充分性显然。考虑证明必要性。
设$L = [a_{1}, a_{2}, \cdots, a_{k}]$。由带余数除法可知,存在唯一的整数$q, r$满足:
$c = qL + r, 0\leqslant r < L$
因为$a_{i}\mid c, a_{i} | qL$,所以$a_{i} | c - qL = r$,因此$r$是$a_{1}, a_{2}, \cdots, a_{k}$的公倍数。由定义可知$r = 0$。因此$L\mid c$。
这一条定理揭示了最小公倍数的本质属性:公倍数一定是最小公倍数的倍数。
定理2.2的证明 充分性 由$D\mid a_{i}$可知$D$是$a_{1}, \cdots, a_{k}$的公约数,再由$D$是正整数,任意满足$d\mid a_{i}$的$d$,则有$d\mid D$可知,$d\leqslant D$。由定义可知$D = (a_{1}, a_{2}, \cdots, a_{k})$。
必要性 设$d_{1}, d_{2}, \cdots, d_{s}$为$a_{1}, a_{2}, \cdots, a_{k}$的全体公约数。设$L = [d_{1}, d_{2}, \cdots, d_{s}]$,所以$d_{i}\leqslant L$。由定理2.1可知,$L\mid d_{i}$,由充分性可知$L = (a_{1}, a_{2}, \cdots, a_{k})$,取$D = L$。
这条定理揭示了一条结论:公约数一定是最大公约数的约数。
定理2.3的证明 若$d\mid a_{i}$,则由定理2.2可知$d\mid (a_{1}, a_{2})$,若$d\mid (a_{1}, a_{2}), d\mid a_{i}, i = 3, 4,\cdots, k$,则由整除的传递性可得$d\mid a_{1}, d\mid a_{2}$。因此它们的公约数集合相同,由定义可知等式成立。
可以利用定理2.3来求多个数的最大公约数。
定理2.4的证明 设$S = \left \{s = a_{1}x_{1} + a_{2}x_{2} + \cdots + a_{k}x_{k}:x_{i}\in \mathbb{Z}\wedge s > 0\right \}$,因为$0 < a_{1}^{2} + a_{2}^{2} + \cdots + a_{k}^{2}\in S$,所以集合$S$中存在正整数。由最小自然数原理可知,$S$中存在最小正整数$s_{0}$。
任意公约数$d\mid s_{0}$,则有$d\mid s_{0}$,所有$d\leqslant s_{0}$。
另一方面,由带余数除法可得$\left|a_{j}\right| = q_{j}s_{0} + r_{j}, 0\leqslant r_{j} < s_{0}$。因为当$a_{j} \neq 0$的时候,$q_{j}s_{0}\in S, \left|a_{j}\right|\in S$,当$r_{j}\neq 0$时,可以证得$r_{j} = \left|a_{j}\right| - q_{j}s_{0}\in S$,这与$s_{0}$的最小性矛盾,故$r_{j} = 0$。因此$s_{0} \mid a_{i}$。
由定理2.2可得$s_{0} = (a_{1}, a_{2}, \cdots, a_{k})$。
根据定理2.4,我们可以知道一组不完全为零的整数$a_{1}, a_{2}, \cdots, a_{k}$,存在一组整数$x_{1}, \cdots, x_{k}$使得$a_{1}x_{1} + a_{2}x_{2} + \cdots + a_{k}x_{k} = \left(a_{1}, a_{2}, \cdots, a_{n} \right )$。现在我们考虑如何来求解它。
首先考虑2个数$u_{0}, u_{1}$的情况,先使用辗转相除法。假设已经知道$u_{k + 1} = x\cdot u_{n} + y\cdot u_{n + 1}$。利用代入消元法消掉$u_{n + 1}$:$u_{k + 1} = x\cdot u_{n} + y(u_{n - 1} - q_{n - 1}u_{n}) = y\cdot u_{n - 1} + (x - q_{n - 1}y)u_{n}$。写成程序就是:
1 void exgcd(int a, int b, int& d, int& x, int& y) { 2 if (!b) 3 d = a, x = 1, y = 0; 4 else { 5 exgcd(b, a % b, d, y, x); 6 y -= (a / b) * x; 7 } 8 }
另外提一句,可以用这样的一个方法来证明定理2.4。
定理2.5的证明 $a = (a, mb) = (a, am, mb) = (a, (a, b)m) = (a, m)$,所以$a\mid m$。
定理2.6的证明 设$d = (a_{1}/m, a_{2} / m, \cdots, a_{k}/m), D = (a_{1}, a_{2}, \cdots, a_{k})$。因为$d\mid a_{i} / m$,所以$md\mid a_{i}$,由定义可得$md\geqslant D$。因为$D \mid a_{i}$,又因为$D / m \mid a_{i} / m$,所以$D / m\geqslant d$,所以$D \geqslant md$,因此$D = md$。
解不定方程
例子 解不定方程$3x_{1} + 5x_{2} = 11\ \ (x_{1}, x_{2}\in \mathbb{Z})$。
首先介绍一下数学解法:
$x_{1} = \frac{1}{3}\left ( 11 - 5x_{2} \right ) = 3 - x_{2}+\frac{1}{3}\left ( 2 - 2x_{2} \right )$。
$x_{1}$是整数的充分必要条件是$\frac{1}{3}\left ( 2 - 2x_{2} \right )\in \mathbb{Z}$。因此设$x_{3} = \frac{1}{3}\left ( 2 - 2x_{2} \right )$
所以有$3x_{3} = 2 - 2x_{2}$。移项得:$x_{2} = \frac{1}{2}\left ( 2 - 3x_{3} \right ) = 1 - x_{3} - \frac{1}{2}x_{3}$。
设$x_{4} = \frac{1}{2}x_{3}\in \mathbb{Z}$。因此有$x_{3} = 2x_{4}, x_{4} \in \mathbb{Z}$。
所以$x_{2} = 1 - \frac{3}{2}x_{3} = 1 - 3x_{4}$,$x_{1} = \frac{1}{3}\left [ 11 - 5\left ( 1 - 3x_{4}\right ) \right ]=2 + 5x_{4}$。
这个做法的本质是对整个不定方程用辗转相除法,不断消去$x_{1}, x_{2}, \cdots$,转化成等价的不定方程,直到有一个未知数的系数的绝对值为1为止。最后再倒着推回去。
如果调用上面的函数呢?我们首先会得到一组数$u, v$使得$3u + 5v = (3, 5) = 1$,然后可得$3(11u) + 5(11v) = 11$。于是便愉快地得到了一组特解。
然后有个问题,假如在方程$a_{1}x_{1} + a_{2}x_{2} = c\ \ (x_{1}, x_{2}\in \mathbb{Z})$中,$(a_{1}, a_{2}) \nmid c$那么会发生什么?答案是无解。
定理3.1 在不定方程$a_{1}x_{1} + a_{2}x_{2} + \cdots +a_{n}x_{n} = c\ \ (x_{1}, \cdots, x_{n}\in \mathbb{Z}, a_{i}\neq 0)$中,存在解的充分必要条件是$(a_{1}, a_{2}, \cdots, a_{n})\mid c$。
证明 必要性由$(a_{1}, a_{2}, \cdots, a_{n})\mid a_{1}x_{1} + a_{2}x_{2} + \cdots +a_{n}x_{n}$可得。充分性由定理2.4易证。
继续考虑二元一次不定方程,我们可以用辗转相除法求出一组特解,那么能不能表示所有解呢?答案是可以的。
定理3.2 设二元一次不定方程$a_{1}x_{1} + a_{2}x_{2} = c$有解,它的一组特解为$u_{1}, u_{2}$,那么它的所有解为
$\left\{\begin{matrix}x_{1} = u_{1} + \frac{a_{2}}{(a_{1}, a_{2})}\cdot t\\ x_{2} = u_{2} - \frac{a_{1}}{(a_{1}, a_{2})}\cdot t\end{matrix}\right.\ \ \left (t\in \mathbb{Z} \right )$
证明 容易验证上式给出的解一定是原方程的解。现在证明原方程的解一定可以这样表示。联立等式有$a_{1}x_{1} + a_{2}x_{2} = a_{1}u_{1} + a_{2}u_{2}$。
所以有$a_{1}(x_{1} - u_{1}) = -a_{2}(x_{2} - u_{2})$。所以$\frac{a_{1}}{(a_{1}, a_{2})}(x_{1} - u_{1}) = -\frac{a_{2}}{(a_{1}, a_{2})}(x_{2} - u_{2})$。
由整除定义可知:$\frac{a_{1}}{(a_{1}, a_{2})} \mid \frac{a_{2}}{(a_{1}, a_{2})}(x_{2} - u_{2})$。根据定理2.5可得$\left ( \frac{a_{1}}{(a_{1}, a_{2})},\frac{a_{2}}{(a_{1}, a_{2})} \right ) = 1$。然后根据定理2.6可得$\frac{a_{1}}{(a_{1}, a_{2})} \mid (x_{2} - u_{2})$。同理可得$\frac{a_{2}}{(a_{1}, a_{2})} \mid (x_{1} - u_{1})$。
由此,定理得证。
(to be continued...)