TAOCP中最大公约数算法理解
TAOCP中,介绍了一个求取最大公约数的算法。假设有两个整数m,n,那么求取两个整数最大公约数的方法如下:
E1:m除以n,余数为r;
E2:如果r=0,那么最大公约数就是n;否则,进入E3;
E3:n的值给m,r的值给n,然后返回E1继续。
算法的主要难点在于:如何论证E3生成的整数对儿的最大公约数为什么与初始的m,n最大公约数一致。
【推到过程】
经过E1,我们可以用以下表达式来表示:
m= qn + r(q,r为整数)
如果此时r=0,那么算法结束,n显示是最大公约数。假如r ≠ 0,那么可以得出如下结论:
1,m,n的所有公约数一定是m – qn = r的约数;
2,n,r 的所有公约数一定是qn + r = m的约数。
这样,{m,n}的公约数结合与{n,r}的公约数集合一致,也就是E3不会改变最终的结果。上面的这段是老爷子书中给出的解释,我大致进行了一下翻译。但是顺着这个思维理解了很久也没能够理解。
其实,我们可以退回去理解一下。从第一条看,r的约数肯定包含了我们要求取的对象,也就是最大公约数肯定是r的约数的子集。而最大公约数同样是m或者n的约数的子集。这样,最大公约数肯定也是{n,r}整数对儿的最大公约数。
其实,我个人觉得关键的理解点还是去看最大公约数存在于什么地方,每次的集合约数是不是包含了最大公约数的存在。
TAOCP中最大公约数算法理解相关推荐
- [Vue][面试]你怎么理解vue中的diff算法?
你怎么理解vue中的diff算法? #####源码分析1:必要性,lifecycle.js–mountComponent() vue中一个组件一个watcher实例,而组件中可能存在很多个data中的 ...
- KMP算法中next数组的理解与算法的实现(java语言)
KMP 算法我们有写好的函数帮我们计算 Next 数组的值和 Nextval 数组的值,但是如果是考试,那就只能自己来手算这两个数组了,这里分享一下我的计算方法吧. 计算前缀 Next[i] 的值: ...
- 微软面试中简单的算法题目(转)
微软面试中简单的算法题目(转) (说明:这些题就不是什么花样了,考的是你的基础知识怎么样.再聪明而没有实学的人都将会被这些题所淘汰.) 1.链表和数组的区别在哪里? ANSWER 主要在基本概念上的 ...
- 实际项目中的常见算法
实际项目中的常见算法 作者 水羽哲 发布于 十一月 30, 2013 | 讨论 [编者按]本文原始内容来源于stackexchange,遵循cc-wiki协议: 近日Emanuele Viola在St ...
- Java虚拟机规范阅读(二)IEEE754简介以及Java虚拟机中的浮点算法
什么是浮点数 在计算机系统的发展过程中,曾经提出过多种方法表达实数.典型的比如相对于浮点数的定点数(Fixed Point Number).在这种表达方式中,小数点固定的位于实数所有数字中间的某个位置 ...
- 全基因组关联分析中上位性检测算法的研究
全基因组关联分析中上位性检测算法的研究 前言 这个项目主要是分享一些全基因组关联分析中上位性检测算法的研究经验,算是,怎么入门,写这么个东西,一是做总结,二是咱实验室估计以后还会有做这个方向的,备着吧 ...
- 机器学习中的最优化算法总结
https://www.toutiao.com/a6672189997212238348/ 导言 对于几乎所有机器学习算法,无论是有监督学习.无监督学习,还是强化学习,最后一般都归结为求解最优化问题. ...
- JS每日一题:Vue中的diff算法?
20190125 Vue中的diff算法? 概念: diff算法是一种优化手段,将前后两个模块进行差异对比,修补(更新)差异的过程叫做patch(打补丁) 为什么vue,react这些框架中都会有di ...
- 隐马尔可夫模型中的Viterbi算法zz
隐马尔可夫模型中的Viterbi算法zz 这篇文章简单描述一下Viterbi算法--一年之前我听过它的名字,直到两周之前才花了一点时间研究了个皮毛,在这里做个简单检讨.先用一句话来简单描述一下:给出一 ...
- 【深度学习】一文搞定面试中的优化算法
深度学习各类优化器 借用古代炼丹的一些名词,我们可以把训练模型中的数据比做炼丹药材,模型比做炼丹炉,火候比做优化器.那么我们知道,同样的药材同样的炼丹炉,但是火候不一样的话,炼出来的丹药千差万别,同样 ...
最新文章
- android handler作用,Android中Handler的作用
- Xamarin iOS教程之页面控件
- SEO优化简要工作流程
- oracle 日期加3个月,三个日期函数(十分有用)!!!!!!!!
- 编写你的第一个 Django 应用,第 4 部分
- spyder开多个程序_【程序源代码】基于Vue+ElementUI web开发框架
- SAP UI5 应用开发教程之五十二 - 如何使用 SAP UI5 的标准控件结合 Cordova 插件调用手机摄像头进行条形码扫描
- 基于kNN的手写字体识别——《机器学习实战》笔记
- POJ - 1321 棋盘问题
- 2019ACM浪潮杯山东省赛参赛总结
- Bootstrap3 带表格的面板
- cheatengine找不到数值_浙江工程勘察资质找谁代办(圆你资质梦)
- epub 阅读器_全球与中国EPUB阅读器市场深度调研分析报告
- 深度学习6-自定义层详解
- R语言: 如何快速获取一个地方的气象数据?
- C++中acculumate函数使用
- highcharts使用downloadCSV导出数据时间与实际时间不对应
- C语言:字符串转为long long --- atoll函数
- 物联网嵌入式开发人员面临的5大挑战
- 利用Reachability判断网络环境(WAN/WIFI)