当前位置 : 主页 > 编程语言 > 其它开发 >

数论再谈

来源:互联网 收集:自由互联 发布时间:2022-07-12
最大公约数 和 最小公倍数 记 \(a\) 和 \(b\) 最大公约数为 \(\gcd(a, b)\) , 记 \(a\) 和 \(b\) 最小公倍数数为 \(lcm(a, b)\) 。 设 \(a b\) 。 求最大公约数 \(gcd(a, b) = gcd(b, a \mod b)\) 。 证明 如果 \(
最大公约数 和 最小公倍数

\(a\)\(b\) 最大公约数为 \(\gcd(a, b)\), 记 \(a\)\(b\) 最小公倍数数为 \(lcm(a, b)\)
\(a > b\)

求最大公约数

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

证明

如果 \(a\)\(b\) 的倍数, 那么 \(\gcd(a,b) = b\),如果 \(b = 0\), 那么 \(\gcd(a, b) = a\)

下面讨论 \(a\) 不是 \(b\) 的倍数的情况。

\(a = bk + r\),那么 \(a \mod b = r\),就是要证明 \(\gcd(a, b) = \gcd(b, r)\)

\(\gcd(a, b) = x\), 于是就有 \(a | x\)\(b | x\)

把上面的式子变一下,就是 \(r = a - bk\),同时除以一个 \(x\),于是 \(\frac{r}{x} = \frac{a}{x} - \frac{bk}{x}\)

\(\because a | x\), \(b | x\)

\(\therefore a | x, bk | x\)

\(\therefore \frac{a}{x},\frac{bk}{x} \in \mathbb{Z}\)

\(\therefore \frac{a}{x} - \frac{bk}{x} \in \mathbb{Z}\)
\(\frac{r}{x} \in \mathbb{Z}\)

\(\therefore r | x\)

那么 \(a, b\) 的约数就是 \(b, r\) 的约数,就可以得到 \(\gcd(a, b) = \gcd(b, r) = \gcd(b, a \mod b)\)

得证。

求最小公倍数

\(lcm(a, b) = a \div gcd(a, b) \times b\)

证明

由唯一分解可以得到
\(a = p_1^{a_1} \times p_2^{a_2} \times \dots \times p_n^{a_n}\)
\(b = p_1^{b_1} \times p_2^{b_2} \times \dots \times p_n^{b_n}\)

那么最大公约数就是
\(\gcd(a, b) = p_1^{\min(a_1, b_1)} \times p_2^{\min(a_2, b_2)} \times \dots \times p_n^{\min(a_n, b_n)}\)

最小公倍数就是
\(lcm(a, b) = p_1^{\max(a_1, b_1)} \times p_2^{\max(a_2, b_2)} \times \dots \times p_n^{\max(a_n, b_n)}\)

显然 \(\gcd(a, b) \times lcm(a, b) = a \times b\)

因此就有 \(lcm(a, b) = a \times b \div \gcd(a, b)\)

然后还可以整一下,设 \(x = \gcd(a, b)\)

于是 \(a = x \times a',b = x \times b'\),于是就有 \(gcd(a', b') = 1\)

那么 \(lcm(a, b) = a' \times x \times b' \times x \div x = a' \times x \times b\),可以发现这显然是最优的。

扩展欧几里得算法

这个算法可以求解形如这样的二元一次方程 \(ax + by = gcd(a, b)\), 其中 \(a,b\in \mathbb{Z}\)

求解

不难发现有无数组解,我们这样设:

\(ax_1 + by_1 = gcd(a, b) \\ bx_2 + (a\mod b)y_2 = gcd(a, b \mod a) \)

由前面的欧几里得算法可以得到 \(gcd(a, b) = gcd(a, b \mod a)\), 于是就有 \(ax_1 + by_1 = bx_2 + (a\mod b)y_2\)

然后又有 \(a\mod b = a - (\lfloor \frac{a}{b} \rfloor \times b)\)

于是就有 \(ax_1 + by_1 = bx_2 + (a - (\lfloor \frac{a}{b} \rfloor \times b))y_2\)

于是 \(ax_1 + by_1 = ay_2 + b(x_2 - (\lfloor \frac{a}{b} \rfloor) \times y_2)\)

因为 \(a = a, b = b\), 所以 \(x_1 = y_2, y_1 = x_2 - (\lfloor \frac{a}{b} \rfloor) \times y_2\)

可以发现上面设的分别是欧几里得算法前后两种状态,所以在求欧几里得的时候就可以顺便把这组解求了。

上一篇:.NET自定义认证虽然简单,但好用
下一篇:没有了
网友评论