码迷,mamicode.com
首页 > 其他好文 > 详细

欧几里得

时间:2019-12-06 09:46:11      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:math   gcd   公式   inline   还需要   应用   好的   递归   就是   

欧几里得

关于欧几里得定理这个东西,我在全网上也没有找到什么好的讲解。所以决定自己来写一写自己都证了好久

欧几里得的应用一般是用在求 \(gcd\) 的时候用的,用辗转相除发递归求 \(gcd\)

相信大家一般都是直接用的,没有想过去证明它,认为他很显然 是吧。

我最开始也是这样以为的,但是却发现自己证了好久。 肯定是我太菜了

不多废话。。。

我就只讲一下欧几里得求 \(gcd\) 的证明。好像欧几里得就这个作用

先写出众所周知的公式:

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

然后不断递归就行了。

现在来证明如上等式:

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

那么, \(a = c * k1\)\(b = c * k2\) (\(k1\)\(k2\) 互质)

那么, \(gcd(a, b) = gcd(c * k1, c * k2)\)

\(a % b = c * k1 % c * k2 = (k1 % k2) * c\)

上面这一步需要好好理解一下,如果\(k1\)\(k2\)不互质的话就没有这个结论

证明如下:

原式可以展开如下 : \(c * k1 = c * k2 * t + e\)

这个 \(t\) 可以为 \(0\),而这个 \(e\) 就是 \(a % b\)

\(a % b = c * k1 - c * k2 * t = c * (k1 - k2 * t)\) 这里不就可以显然的看出 \(a % b\) 就是 \(c\) 的倍数了。

再写出它需要到达的状态:

\(gcd(b, a % b) = gcd(c * k2, c * k1 % c * k2)\)

在如上面所证,提取一个 \(c\)

=》 \(gcd(c * k2, c * (k1 % k2))\)

我们只需要证明这个东西和原式的 \(gcd\) 相等就行。

那么,我们还需要知道的是 \(k2\)\(k1 % k2\) 互质。

那么就能保证两数的 \(gcd\) 是相等的。

\(k3 = k1 % k2\)

那么,

欧几里得

标签:math   gcd   公式   inline   还需要   应用   好的   递归   就是   

原文地址:https://www.cnblogs.com/Flash-plus/p/11992902.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!