辗转相除法(Euclidean Algorithm)极简证明

辗转相除法的目的:求两个树的最大公约数

 

设两数为a、b(a > b),求它们最大公约数的步骤如下:

设q = a / b,r = a % b, 得a=bq+r(0≤r<b)。

1)若r = 0, 则b是a和b的最大公约数。

2)若r≠0,则继续考虑。可以证明:a 和 b 的最大公约数也是 b 和 r 的最大公约数

那么在第二种情况下公约数的关系就有一个递推传递的关系。

就是 a     b   的公约数等于    b      r(a % b)的公约数(a=bq+r)在后者不等于零的情况下,这个循环可以一直递推下去。

就是b      r(a%b)之间的公约数    等于r(a % b)  b%r的的公约数

…..

只到第二个 第一个数%第二个数 等于0,这时候的第第一个数:a‘,是整个过程中每一对数的最大公约,也是最开始的a 和b的最大公约数

 

一句话总结:给出两个自然数 first 和 second:检查 second 是否为0;如果是,则 这时候的first 为最大公约数,或者说为整个递推循环中的每一对树的最大公约数。如果second不为0,则分别用 second 和 first%second 作为下一步分 第一个数 和 第二个数 重复这一递推步骤

代码

int gcd(int first  int second)

{

        return second==0?first:gcd(second, first%second)

}

最大公约数用处:

最小公倍数 = 两数之积 / 最大公约数

辗转相除法(Euclidean Algorithm)极简证明

时间: 2024-10-21 09:48:14

辗转相除法(Euclidean Algorithm)极简证明的相关文章

反向传播神经网络极简入门

反向传播神经网络极简入门 我一直在找一份简明的神经网络入门,然而在中文圈里并没有找到.直到我看到了这份162行的Python实现,以及对应的油管视频之后,我才觉得这就是我需要的极简入门资料.这份极简入门笔记不需要突触的图片做装饰,也不需要赘述神经网络的发展历史:要推导有推导,要代码有代码,关键是,它们还对得上.对于欠缺的背景知识,利用斯坦福大学的神经网络wiki进行了补全. 单个神经元 神经网络是多个“神经元”(感知机)的带权级联,神经网络算法可以提供非线性的复杂模型,它有两个参数:权值矩阵{W

【得到每天听本书】开口就能说重点-极简君解读

这本书就是教我们"如何在最短的时间,把最重要的事情说明白". 1.一个简单的训练法:一分钟训练法. 一分钟训练法主要就是提升信息概括能力,从结论说起!需要的工具分别是三色圆珠笔.秒表以及一个录音设备. 用红色笔写下这个主题讲话的关键字,用蓝色笔对必须要说的内容进行标注,绿色则标注你觉得有趣的部分.同时,也可以做一个结构性的时间分配,1分钟可以分为3个20秒,或者4个15秒,分别来讲述不同的部分. 一分钟训练注意三点:严格计时客观反映自己一分钟输出能力:发声练习避免脑中意识模糊不清:对录

CentOS下使用Postfix + Dovecot + Dnsmasq搭建极简局域网邮件系统

背景 开发环境为局域网,工作内容需要经常查看邮件文件(*.eml),可恶的Foxmail必须验证账户才能进入主界面,才能打开eml文件查看. 无奈搭一个局域网内的邮件系统吧.极简搭建,仅用于通过Foxmail验证. 环境 [[email protected] ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) 安装 下载服务器软件: SMTP服务器postfix POP/IMAP服务器dovecot DNS服务器dns

React Native的极简手册

安装入门可以参考:React Native官方文档(http://reactnative.cn/docs/0.31/tutorial.html#content). NodeJS知识储备:参考<NodeJS入门>(https://leanpub.com/nodebeginner-chinese).(尊重知识,请购买原版). 书籍:<React Native入门与实战> 代码示例:30天学习React Native教程(https://github.com/fangwei716/30-

极简主义生活方式

极简主义生活方式,是对自身的再认识,对自由的再定义. 深入分析自己,首先了解什么对自己最重要,然后用有限的时间和精力,专注地追求,从而获得最大幸福. 放弃不能带来效用的物品,控制徒增烦恼的精神活动,简单生活,从而获得最大的精神自由. 1.欲望极简 了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风.把自己的精力全部用在自己最迫切的欲望上,如提升专业素养.照顾家庭.关心朋友.追求美食等. 2.精神极简 了解.选择.专注于1-3项自己真正想从事的精神活动,充分学习.提高.不盲目浪费自己的时间与精

极简OCI连接TimesTen程序

针对Oracle数据库的开发,Java和OCI是最常用的两种编程语言,对于TimesTen也是一样. 相较于Pro*C,OCI编程稍显复杂.但OCI提供更细粒度的控制,提供更丰富的功能和更好的性能.因此,对于熟悉C语言的编程人员,为性能和可控制性,以及易于调试,都应该首选OCI而非Pro*C. 和Pro*C一样, OCI也支持用TNS和easy connect string(DSN)来连接TimesTen. 可以通过connect string和TWO_TASK来指定相应的接口. 由于大部分的概

Vim,极简使用教程,让你瞬间脱离键鼠切换的痛苦

写之前,脑子里觉得可以最常用操作的来熟悉Vim,内容不多,写了一半确发现,即使是最常用的操作,讲完也要写好多,已经不能叫什么极简教程了,不过既然写了,就这样吧 都说Vim很难学,是的,相对于鼠标来讲,肯定是超难学了.但它的好处真的非常多,特别是对于敲代码的同学.关于这些问题,今天就不讨论了,这里主要说的是,只要记住小小的一部分操作,就可以很轻松的使用Vim,仍然可以极大的提高敲代码的效率哦. 网上很多介绍Vim的文章,都在介绍它强大的操作,其实加大了学习的难度,我简单的总结了一下,要使用Vim只

Ui培训之如何设计极简三色图标

小编之前在ui培训课程里面了解到,在ui设计当中,时下图标设计流行的是一种不一样的极简风,这样会更加细腻有趣.配色是设计中永恒的话题,在我看来简易更是设计的精髓. Banana Bird 在刚刚接受ui培训的时候,一般会从单色,或者双色结构来授课,就如上图的banana bird图标,如此简易,但也明确体现图标所表达的内容. KZ 然而,许多设计师都认为三种色彩构成的配色是最平衡也是最漂亮的,多一色显得太花,少一色又过于朴素,这也是为什么许多配色方案的构成多为3种色彩.就如小米的包装设计,都是以

少即是多------------极简主义生活方式

极简主义生活方式,是对自身的再认识,对自由的再定义. 深入分析自己,首先了解什么对自己最重要,然后用有限的时间和精力,专注地追求,从而获得最大幸福. 放弃不能带来效用的物品,控制徒增烦恼的精神活动,简单生活,从而获得最大的精神自由. 欲望极简 了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风. 把自己的精力全部用在自己最迫切的欲望上,如提升专业素养.照顾家庭.关心朋友.追求美食等. 精神极简 了解.选择.专注于1-3项自己真正想从事的精神活动,充分学习.提高.不盲目浪费自己的时间与精力.