C++算法:辗转相除法与更相减损术
辗转相除法与更相减损术
1.我们已经学过求最大公因数的知识,你能求出18与30的公因数吗?
2.如果公因数比较大而且根据我们的观察又不能得到一些公因数,我们又应该怎样求它们的最大公因数?比如求8251与6105的最大公因数?
知识导航:
辗转相除法:又叫欧几里得算法,是一种求两个正整数的最大公因数的古老有效的算法。
更相减损法:我国古代数学专著《九章算术》中介绍的一种求两个正整数的______算法。
名称 |
辗转相除法 |
更相减损术 |
区别 |
①以除法为主 ②两个整数差值较大时运算次数较少 ③相除余数为零时得结果 |
①以减法为主 ②两个整数的差值较大时,运算次数较多 ③相减,两数相等时得结果 ④相减前要做是否都是偶数的判断。 |
联系 |
①都是求最大公因数的方法 ②都是递归的思想 ③都要用循环结构来实现 |
典型例题:
一.辗转相除法
例1 。求两个正数8251和6105的最大公因数。
(分析:辗转相除→余数为零→得到结果)
解:8251=6105×1+2146
显然8251与6105的最大公因数也必是2146的因数,同样6105与2146的公因数也必是8251的因数,所以8251与6105的最大公因数也是6105与2146的最大公因数。
6105=2146×2+1813
2146=1813×1+333
1813=333×5+148
333=148×2+37
148=37×4+0
则37为8251与6105的最大公因数。
以上我们求最大公因数的方法就是辗转相除法。也叫欧几里德算法,它是由欧几里德在公元前300年左右首先提出的。
1. 为什么用这个算法能得到两个数的最大公因数?
利用辗转相除法求最大公因数的步骤如下:
第一步:用较大的数m除以较小的数n得到一个商q0和一个余数r0;
第二步:若r0=0,则n为m,n的最大公因数;若r0≠0,则用除数n除以余数r0得到一个商q1和一个余数r1;
第三步:若r1=0,则r1为m,n的最大公因数;若r1≠0,则用除数r0除以余数r1得到一个商q2和一个余数r2;
……
依次计算直至rn=0,此时所得到的rn-1即为所求的最大公因数。
练习:利用辗转相除法求两数4081与20723的最大公因数。
2。辗转相除法包含重复操作的步骤,因此我们可用__循环_______结构来构造算法,
利用辗转相除法求最大公因数的步骤:
二。更相减损术
我国早期也有解决求最大公因数问题的算法,就是更相减损术。
更相减损术求最大公因数的步骤如下:可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也,以等数因之。
翻译成现代汉语为:
第一步:任意给出两个正数;判断它们是否都是偶数。若是,就除以2;若不是,执行第二步。
第二步:以较大的数减去较小的数,接着把较小的数与所得的差比较,并以大数减小数。继续这个操作,直到所得的数相等为止,则这个数(等数)就是所求的最大公因数。
例2。 用更相减损术求392与252的最大公因数.
解:由于392与252都是偶数,需约简,分别除以4得:98与63
由于63不是偶数,把98和63以大数减小数,并辗转相减,即:98-63=35
63-35=28
35-28=7
28-7=21
21-7=14
14-7=7
所以,98与63的最大公因数是7。392与252的最大公因数为4*7=28。
1。用更相减损术能求出两个数的最大公因数的原理是什么?
练习:用更相减损术求两个正数576与246的最大公因数。
比较辗转相除法与更相减损术的区别
(1)都是求最大公因数的方法,计算上辗转相除法以除法为主,更相减损术以减法为主,计算次数上辗转相除法计算次数相对较少,特别当两个数字大小区别较大时计算次数的区别较明显。
(2)从结果体现形式来看,辗转相除法体现结果是以相除余数为0则得到,而更相减损术则以减数与差相等而得到
C++算法:辗转相除法与更相减损术相关推荐
- 辗转相除法和更相减损术
高中学过的求大公约数的方法就是辗转相除法和更相减损术了. 辗转相除法递归版 #include <iostream> using std::cin; using std::cout; usi ...
- 辗转相除法与更相减损术(求最大公约数)
辗转相除法:两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数.比如10和25,25除以10商2余5,那么10和25的最大公约数,等同于10和5的最大公约数. ...
- 辗转相除法、更相减损法、Stein算法
最大公约数和最小公倍数求解,常用的方法是短除法进行因式分解,然后最大公约数是所有公共因子的乘积,最小公倍数是所有因子的乘积. 本质上求最小公倍数就是求最大公倍数:x=m*a, y=m*b:m是最大公约 ...
- C语言复习---获取最大公约数(辗转相除法和更相减损法)
源自:百度百科 辗转相除法 辗转相除法:辗转相除法是求两个自然数的最大公约数的一种方法,也叫欧几里德算法. 例如,求(319,377): ∵ 319÷377=0(余319) ∴(319,377)=(3 ...
- 更相减损法java,五十六、从高中碾转相除法、更相减损术算法谈起
「@Author:Runsen」❝ 编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题进行代码化.「---- Runsen」❞ 先问你们一个小学问题:「如何求两个整数的最大公约数?」 曾 ...
- 更相减损法java,五十6、从高中碾转相除法、更相减损术算法谈起
「@Author:Runsen」git ❝ 编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题进行代码化.「---- Runsen」github ❞ 先问大家一个小学问题:「如何求两个整 ...
- 最详细最简单:最大公因数求法、辗转相除法、更相减损法,入门ACM,杭电水题,算法递归,初级算法题一看就懂
文章目录 前言 一.名称定义 1.最大公约数 2.辗转相除法 3.更相减损法 二.ACM杭电入门题 1.解题思路 三.解题参考代码(C语言,C++) 0.最优算法(C++) 1.辗转相除求解(C语言) ...
- 求最大公约数和最小公倍数——辗转相除法(欧几里得算法)、更相减损术、stein算法
辗转相除法-- 辗转相除法求最大公约数的原理: 两个整数其中较小的数 和 两数相除(较大数除较小数)的余数(使用递归)的最大公约数. 辗转相除法求最小公倍数的原理: 两个整数分别除以最大公约数的结果相 ...
- 【C语言】辗转相除法+更相减损术+秦九韶算法
一.辗转相除法 1.简介 辗转相除法又叫欧几里得算法. 假如需要求 1997 和 615 两个正整数的最大公约数,用欧几里得算法,是这样进行的: 1997 / 615 = 3 (余 152) 615 ...
最新文章
- JSP第二次作业_6小题
- git本地ben远程分支_git 本地分支与远程分支
- yii2实战教程之第一个Yii程序
- 实现文本编辑器的设计与实现_ArrayList实现分析(三)——迭代器的实现
- 求数组中的最长递增子序列
- gcc编译器与g++编译器的区别
- 设置IE默认文本模式的方法
- Windows Server 2016-批量设置用户下次登陆须更改密码
- js动态创建元素和删除
- 您可能(或可能不)知道的5条便捷的Transact-SQL技巧
- nopcommerce插件深度剖析
- webgis之Openlayer加载wmts服务
- php 字符串截掉前两位,如何在PHP的前20个单词中截断字符串?
- CoolHC Volume 1 By CoolFire
- SAP MM批次管理(1)物料与批次
- 模型预测控制参数调整问题
- 如何手动彻底消除U盘使用痕迹
- 利用极域电子教室控制别人电脑
- git 和 github 是什么意思?
- Django 指定目录创建app