欧几里得算法:从证明等式gcd(m, n) = gcd(n, m mod n)对每一对正整数m, n都成立说开去
写诗或者写程序的时候,我们经常要跟欧几里得算法打交道。然而有没要考虑到为什么欧几里得算法是有效且高效的,一些偏激(好吧,请允许我用这个带有浓重个人情感色彩的词汇)的计算机科学家认为,除非程序的正确性在数学上得到了完全严格的证实,否则我们不能认为程序是正确的。既然存在即合理,因此下面我就详细得解说一下欧几里得算法,它为什么是正确的算法(算法过程就不给出了,有了思想,无论是迭代还是循环实现应该都不成问题),为什么有那么好的时间复杂性。
首先还是证明上述命题:注意到证明了该命题就证明了欧几里得算法的正确性。
证明:令d = gcd(m, n),则d|m 且d|n。设m = kn + r(0≤ r < n),则 d|(kn+r)。又有d|n,因此d|kn,所以有d|r。即我们由d|m 且d|n 这个前提可以得出d|r。换就话说,我们也可以说成由d|m 且d|n 这个前提推出了d|n 且 d|r。使用类似的推理过程同样可以得到:由d|n 且 d|r 可以推出d|m 且 d|n。注意到这里的r 即 m mod n。因此我们可以说gcd(m, n) = gcd(n, m mod n)是双向成立的,命题得证。
关于欧几里得定理我还是想多说一点,那就是欧几里得本人给出的证明过程,他的思维清晰,逻辑严密,虽然采用的几何证法,但是不失严密和优美。下面我就简略地复述一遍我们敬爱的欧几里得先生给出的证明,原版证明见欧几里得的成名作品《几何原本》:如果m 和n 互素,那么它们的最大公约数显然是1。如果两者不互素的话:首先,想象两段线段,它们的长度分别是m 和n。姑且把他们称作线段AB 和CD。我们取其中较短的一段量取另一段,姑且认为CD 是其中较短的线段,如果CD 量尽AB,这时它也量尽它自己,那么CD 就是CD、AB的一个公度数,显然CD 同时也是最大公度数,因为没有比CD 大的数能量尽CD。但是,如果CD 量不尽AB,那么从AB,CD中的较大者中不断地减去较小者,如此,将有一个余数能量尽它前面一个。我们说这个数就是m 和n 的最大公度数,为什么呢?假设这个余数不是最大公度数,那么必有大于该数的一个数能量尽AB 和 CD,最后我们能推出大于该余数的这个数能量尽这个余数,注意到这是不可能的,因为较大的数量尽较小的数是不可能的。通过这个反证的过程,我们知道没有大于该余数的数能量尽AB,CD。因而这个数就是AB 和 CD也即m 和n 的最大公度数。
好了,证明到这里先告一段落,下面我们来考察一下欧几里得算法的效率。
令r0 = m mod n, r1 = n mod r0。于是有gcd(m, n) = gcd(n, r0) = gcd(r0, r1)。只需要注意到这一事实:r0 < m/2 或者 r1 < n/2。就可以知道在两步之内算法的规模减半了,也就是说,其时间复杂度为2logn = O(logn)。这就是其时间复杂度的上界。如果你随便写一个算法,它的时间复杂度是O(logn),那么世界该有多么美好啊。
All Rights Reserved.
Author:海峰:)
Copyright © xp_jiang.
转载请标明出处:http://www.cnblogs.com/xpjiang/p/4485409.html
欧几里得算法:从证明等式gcd(m, n) = gcd(n, m mod n)对每一对正整数m, n都成立说开去的更多相关文章
- Algorithms4th 1.1.25 欧几里得算法——数学归纳法证明
欧几里得算法的自然语言描述 计算两个非负整数p和q的最大公约数: 若q是0,则最大公约数为p.否则将p除以q得到余数r,p和q的最大公约数即为q和r的最大公约数. 数学归纳法证明 基础步骤: 若q = ...
- 浅谈欧几里得算法求最大公约数(GCD)的原理及简单应用
一.欧几里得算法及其证明 1.定义: 欧几里得算法又称辗转相除法,用于求两数的最大公约数,计算公式为GCD(a,b)=GCD(b,a%b): 2.证明: 设x为两整数a,b(a>=b)的最大公约 ...
- 欧几里得算法(gcd) 裴蜀定理 拓展欧几里得算法(exgcd)
欧几里得算法 又称辗转相除法 迭代求两数 gcd 的做法 由 (a,b) = (a,ka+b) 的性质:gcd(a,b) = gcd(b,a mod b) int gcd(int a,int b){ ...
- 欧几里得 & 拓展欧几里得算法 解说 (Euclid & Extend- Euclid Algorithm)
欧几里得& 拓展欧几里得(Euclid & Extend-Euclid) 欧几里得算法(Euclid) 背景: 欧几里德算法又称辗转相除法.用于计算两个正整数a.b的最大公约数. -- ...
- 欧几里得(Euclid)与拓展的欧几里得算法
欧几里得(Euclid)与拓展的欧几里得算法 欧几里得(Euclid)与拓展的欧几里得算法 欧几里得算法 原理 实现 拓展的欧几里得算法 原理 递归求解 迭代求解 欧几里得算法 原理 欧几里得算法是一 ...
- [数学基础] 4 欧几里得算法&扩展欧几里得算法
欧几里得算法 欧几里得算法基于的性质: 若\(d|a, a|b\),则\(d|(ax+by)\) \((a,b)=(b,a~mod~b)\) 第二条性质证明: \(\because a~mod~b=a ...
- 扩展欧几里得算法(extgcd)
相信大家对欧几里得算法,即辗转相除法不陌生吧. 代码如下: int gcd(int a, int b){ return !b ? gcd(b, a % b) : a; } 而扩展欧几里得算法,顾名思义 ...
- 关于欧几里得算法(gcd)的证明
求a,b的最大公约数我们经常用欧几里得算法解决,也称辗转相除法, 代码很简短, int gcd(int a,int b){ return (b==0)?a:gcd(b,a%b); } 但其中的道理却很 ...
- 初等数论-Base-2(扩展欧几里得算法,同余,线性同余方程,(附:裴蜀定理的证明))
我们接着上面的欧几里得算法说 扩展欧几里得算法 扩展欧几里德算法是用来在已知a, b求解一组x,y,使它们满足贝祖等式\(^①\): ax+by = gcd(a, b) =d(解一定存在,根据数论中的 ...
随机推荐
- 如何将一个对象存到网页中并在js中使用
需求:希望在js中使用Controller传过来的对象,特别是对象里存有list的数据. 不希望循环使用隐藏域. 解决办法:在View中使用Json.Net序列化: @{ string jsonStr ...
- JavaScript笔记——引用类型之Object类型和Function类型
<JavaScript高级程序设计>中介绍的几种JavaScript的引用类型,本文只记了Object跟Function类型 Object类型 创建对象 var person = new ...
- Hive_DDL与DML
DDL(数据定义语言) create.drop.alter.truncate.show.describe DML(数据控制语言) load.insert.update.delete.import/ex ...
- Git分布式项目管理 入门到学会
Git简介 Git是什么? Git和SVN一样都是一种高效的管理代码的系统. Git是目前世界上最先进的分布式版本控制系统(没有之一). 创建版本库 什么是版本库呢?版本库又名仓库,英文名reposi ...
- Layer弹窗组件
layer是一款近年来备受青睐的web弹层组件,她具备全方位的解决方案,致力于服务各水平段的开发人员,您的页面会轻松地拥有丰富友好的操作体验. Layer的开发手册和下载地址 http://layer ...
- # 20145334赵文豪 《Java程序设计》第5周学习总结
20145334赵文豪 <Java程序设计>第5周学习总结 教材学习内容总结 第八章 1.使用try.catch打包System.in.read(),声明throws java.io.IO ...
- [silverlight—wcf]参数:调试资源字符串不可用,秘钥和参数通常提供足够的信息用以诊断问题。
这段时间在做一个项目,有一项需求是上传,经过思考之后,决定采取Silverlight+WCF的方式做上传操作.就在项目做完了之后,本地测试也都没问题,发布到服务器上的时候,顿时就出现故障了.在选择文件 ...
- 利用Columnal网格系统快速搭建网站的基本布局结构
1.下面是一些对响应式设计提供了不同程度支持的CSS框架: (1)Semantic(http://semantic.gs); (2)Skeleton(http://getskeleton.com); ...
- HDU 3695 Computer Virus on Planet Pandora(AC自动机模版题)
Computer Virus on Planet Pandora Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 256000/1280 ...
- 实现服务器端与客户端的高频实时通信 SignalR(2)
说明:本篇文章与上篇文章 实现服务器端与客户端的实时通信 SignalR(1) 基本代码类似,只是做了些处理 高频 的改动. 一.本文出处:SignalR 实例介绍 (建议看原著里面有DEMO下载) ...