Algorithms4th 1.1.25 欧几里得算法——数学归纳法证明
欧几里得算法的自然语言描述
计算两个非负整数p和q的最大公约数:
若q是0,则最大公约数为p。否则将p除以q得到余数r,p和q的最大公约数即为q和r的最大公约数。
数学归纳法证明
基础步骤:
若q = 0,则 gcd(p, q) = gcd(p, 0) = p。
归纳步骤:
令 p = a * q + r, 其中 p、a、q、r 均为非负整数。
设 d 整除 p 和 q, 则 d 可以整除 p - a * q = r,即 p / d = a*q / d + r / d 。
此时, d 为 p,q 的公约数,且 d 为 q,r 的公约数,即 p 和 q 的公约数 = q 和 r 的公约数 = d 。
也即 gcd(p, q) = gcd(q, r) , 其中 r 为 p 除以 q 的余数。
不断归纳,直至函数 gcd 的第二个参数为0,此时得到基础步骤。
此时我们已经证明了最终的结果是 p 和 q 的一个约数。
然而这还没完,因为我们只证明了最终结果是一个公约数,但没有证明它是最大的公约数。
因为 d 整除 p 和 q,可得 d 整除 p - a * q = r, 因此 p 和 q 的任意约数也为 q 和 r 的约数;
同理,d整除 q 和 r, 可得 d 整除 a * q + r = p, 因此q 和 r 的任意约数也为 p 和 q 的约数。
综上,p 和 q 的约数集等于 q 和 r 的约数集。
接下来由递推法:
假定当函数gcd()的第二个参数为0时,第一个参数为m,可得 p 和 q 的约数集与 m 和 0 的约数集相同。
由数学归纳法的基础情况知, 而 m 和 0 的最大公约数为 m, 即 m 和 0 的约数集的最大值为 m,
由此可得 p 和 q 的约数集的最大值也为 m 。
综上,欧几里得算法得证。
献上Java代码:
public class Euclid
{
public static int gcd(int p, int q) {
if(q == 0)
return p;
int r = p % q;
return gcd(q,r);
} public static void main(String[] args) {
int result = gcd(16, 24);
System.out.println(result);
}
}
Algorithms4th 1.1.25 欧几里得算法——数学归纳法证明的更多相关文章
- 欧几里得算法:从证明等式gcd(m, n) = gcd(n, m mod n)对每一对正整数m, n都成立说开去
写诗或者写程序的时候,我们经常要跟欧几里得算法打交道.然而有没要考虑到为什么欧几里得算法是有效且高效的,一些偏激(好吧,请允许我用这个带有浓重个人情感色彩的词汇)的计算机科学家认为,除非程序的正确性在 ...
- 浅谈欧几里得算法求最大公约数(GCD)的原理及简单应用
一.欧几里得算法及其证明 1.定义: 欧几里得算法又称辗转相除法,用于求两数的最大公约数,计算公式为GCD(a,b)=GCD(b,a%b): 2.证明: 设x为两整数a,b(a>=b)的最大公约 ...
- 关于欧几里得算法(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(解一定存在,根据数论中的 ...
- 『扩展欧几里得算法 Extended Euclid』
Euclid算法(gcd) 在学习扩展欧几里得算法之前,当然要复习一下欧几里得算法啦. 众所周知,欧几里得算法又称gcd算法,辗转相除法,可以在\(O(log_2b)\)时间内求解\((a,b)\)( ...
- 详解扩展欧几里得算法(扩展GCD)
浅谈扩展欧几里得(扩展GCD)算法 本篇随笔讲解信息学奥林匹克竞赛中数论部分的扩展欧几里得算法.为了更好的阅读本篇随笔,读者最好拥有不低于初中二年级(这是经过慎重考虑所评定的等级)的数学素养.并且已经 ...
- noip知识点总结之--欧几里得算法和扩展欧几里得算法
一.欧几里得算法 名字非常高大上的不一定难,比如欧几里得算法...其实就是求两个正整数a, b的最大公约数(即gcd),亦称辗转相除法 需要先知道一个定理: gcd(a, b) = gcd(b, a ...
- 欧几里得算法与扩展欧几里得算法_C++
先感谢参考文献:http://www.cnblogs.com/frog112111/archive/2012/08/19/2646012.html 注:以下讨论的数均为整数 一.欧几里得算法(重点是证 ...
- 最小公约数(欧几里得算法&&stein算法)
求最小公约数,最easy想到的是欧几里得算法,这个算法也是比較easy理解的,效率也是非常不错的. 也叫做辗转相除法. 对随意两个数a.b(a>b).d=gcd(a.b),假设b不为零.那么gc ...
随机推荐
- 解决 pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on '127.0.0.1' ([Errno 61] Conne
pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on '127.0.0.1' ([Errno 61] ...
- mitmproxy 使用mitmdump 过滤请求
mitmproxy 抓包工具,优点可以使用python进行二次开发,或者进行接口的mock 官网地址:https://www.mitmproxy.org/ 打算用这个最初的需求是,想对app做接口测试 ...
- Dubbo学习-1-基础知识
分布式基础理论 1.什么是分布式系统: 分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像是单个相关系统.分布式系统是建立在网络之上的软件系统 随着互联网发展,网站应用规模的不断扩大,常规的 ...
- How to pass values across the pages in ASP.net without using Session
https://stackoverflow.com/questions/14956027/how-to-pass-values-across-the-pages-in-asp-net-without- ...
- 前端基础知识-----HTML
一.HTML基础概述 HTML:超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用于创建网页的标准语言.也就是一般我们在浏览器里看到的东西的书写格式,与 ...
- 纯文本编辑语言markdown
Markdown的主要目的是生成可以复制到网页或写入平台的HTML代码.但你不必那样使用它.Markdown也可以作为强大记笔记的基础,许多Markdown编辑可以将您的写作导出为其他格式,如Word ...
- Microsoft Office Word
快捷键 选区 选择块:[Shift]+click,光标放到块的一端,然后按住Shift,然后光标放到块的另一端. 更新域: F9 右键没有更新域选项时可以使用,如更新全部域先Ctrl + A然后F9 ...
- java切分查询数据库表
在实际应用中,我经常用到遇到根据单号查询,单号又是批量如1000个单号,直接1000个in子查询是不行的,子查询是用上限的.如果表中数据达到上百万以上.即使有单号字段有索引查询也是很慢.这时可以用切分 ...
- nacos 报错is not in serverlist
描述 nacos 没有在节点列表里面 查看日志 cd /opt/nacos/ tailf /logs/naming-raft.log <!--报错--> 2019-08-16 17:48: ...
- vue实现ajax请求(vue-resource和axios)
1.vue-resouce实现ajax请求 vue1中主要用vue-resouce实现ajax请求, 2.1 引用vue-resouce 引入axios,直接在index.html文件中引入; 或者在 ...