辗转相除法与更相减损术

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++算法:辗转相除法与更相减损术相关推荐

  1. 辗转相除法和更相减损术

    高中学过的求大公约数的方法就是辗转相除法和更相减损术了. 辗转相除法递归版 #include <iostream> using std::cin; using std::cout; usi ...

  2. 辗转相除法与更相减损术(求最大公约数)

    辗转相除法:两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数.比如10和25,25除以10商2余5,那么10和25的最大公约数,等同于10和5的最大公约数. ...

  3. 辗转相除法、更相减损法、Stein算法

    最大公约数和最小公倍数求解,常用的方法是短除法进行因式分解,然后最大公约数是所有公共因子的乘积,最小公倍数是所有因子的乘积. 本质上求最小公倍数就是求最大公倍数:x=m*a, y=m*b:m是最大公约 ...

  4. C语言复习---获取最大公约数(辗转相除法和更相减损法)

    源自:百度百科 辗转相除法 辗转相除法:辗转相除法是求两个自然数的最大公约数的一种方法,也叫欧几里德算法. 例如,求(319,377): ∵ 319÷377=0(余319) ∴(319,377)=(3 ...

  5. 更相减损法java,五十六、从高中碾转相除法、更相减损术算法谈起

    「@Author:Runsen」❝ 编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题进行代码化.「---- Runsen」❞ 先问你们一个小学问题:「如何求两个整数的最大公约数?」 曾 ...

  6. 更相减损法java,五十6、从高中碾转相除法、更相减损术算法谈起

    「@Author:Runsen」git ❝ 编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题进行代码化.「---- Runsen」github ❞ 先问大家一个小学问题:「如何求两个整 ...

  7. 最详细最简单:最大公因数求法、辗转相除法、更相减损法,入门ACM,杭电水题,算法递归,初级算法题一看就懂

    文章目录 前言 一.名称定义 1.最大公约数 2.辗转相除法 3.更相减损法 二.ACM杭电入门题 1.解题思路 三.解题参考代码(C语言,C++) 0.最优算法(C++) 1.辗转相除求解(C语言) ...

  8. 求最大公约数和最小公倍数——辗转相除法(欧几里得算法)、更相减损术、stein算法

    辗转相除法-- 辗转相除法求最大公约数的原理: 两个整数其中较小的数 和 两数相除(较大数除较小数)的余数(使用递归)的最大公约数. 辗转相除法求最小公倍数的原理: 两个整数分别除以最大公约数的结果相 ...

  9. 【C语言】辗转相除法+更相减损术+秦九韶算法

    一.辗转相除法 1.简介 辗转相除法又叫欧几里得算法. 假如需要求 1997 和 615 两个正整数的最大公约数,用欧几里得算法,是这样进行的: 1997 / 615 = 3 (余 152) 615 ...

最新文章

  1. JSP第二次作业_6小题
  2. git本地ben远程分支_git 本地分支与远程分支
  3. yii2实战教程之第一个Yii程序
  4. 实现文本编辑器的设计与实现_ArrayList实现分析(三)——迭代器的实现
  5. 求数组中的最长递增子序列
  6. gcc编译器与g++编译器的区别
  7. 设置IE默认文本模式的方法
  8. Windows Server 2016-批量设置用户下次登陆须更改密码
  9. js动态创建元素和删除
  10. 您可能(或可能不)知道的5条便捷的Transact-SQL技巧
  11. nopcommerce插件深度剖析
  12. webgis之Openlayer加载wmts服务
  13. php 字符串截掉前两位,如何在PHP的前20个单词中截断字符串?
  14. CoolHC Volume 1 By CoolFire
  15. SAP MM批次管理(1)物料与批次
  16. 模型预测控制参数调整问题
  17. 如何手动彻底消除U盘使用痕迹
  18. 利用极域电子教室控制别人电脑
  19. git 和 github 是什么意思?
  20. Django 指定目录创建app

热门文章

  1. 【汇正财经】12.8日盘面回顾和行情解析
  2. Kotlin Monad的学习
  3. springboot5==IDEA springboot2.5.6通过QQ邮箱发送邮件
  4. Uber Shader
  5. ABAQUS中的碳纤维增强复合材料失效演化Hashin准则及参数详解
  6. 图形类的实现(java)
  7. Linux、centos、ubuntu 可用的几种网络测速工具(外网)
  8. 心理账户:一个重要的影响你财富的因素
  9. 国内地图服务商以及情况
  10. Mac连接校园网 AC认证失败