浅谈欧几里得算法

  (觉得自己快没了,赶紧完成想做的事)

  最大公约数是数论中很常见的一个知识。本文将从数学和信息学两个方面简单谈一下它。

带余数除法 

定理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...)

posted @ 2018-06-20 20:56  阿波罗2003  阅读(390)  评论(0编辑  收藏  举报