1、142 算法案例(2)教学目标:(1)理解辗转相除法与更相减损术中蕴含的数学原理,并能根据这些原理进行算法分析;(2)基本能根据算法语句与程序框图的知识设计完整的程序框图并写出算法程序;教学重点:理解辗转相除法与更相减损术求最大公约数的方法教学难点:把辗转相除法与更相减损术的方法转换成程序框图与程序语言教学过程一、问题情境在初中,我们已经学过求最大公约数的知识,你能求出 18 与30 的公约数吗?我们都是利用找公约数的方法来求最大公约数,如果公约数比较大而且根据我们的观察又不能得到一些公约数,我们又应该怎样求它们的最大公约数?比如求 8251 与 6105 的最大公约数?这就是我们这一堂课所要
2、探讨的内容二、算法设计思想:1.辗转相除法:例 1求两个正数 8251 和 6105 的最大公约数(分析:8251 与 6105 两数都比较大,而且没有明显的公约数,如能把它们都变小一点,根据已有的知识即可求出最大公约数)解:8251610512146显然 8251 和的 2146 最大公约数也必是 2146 的约数,同样6105 与 2146 的公约数也必是 8251 的约数,所以 8251 与 6105的最大公约数也是 6105 与 2146 的最大公约数6105214621813214618131333181333351483331482371483740则 37 为 8251 与 61
3、05 的最大公约数以上我们求最大公约数的方法就是辗转相除法也叫欧几里德算法,它是由欧几里德在公元前 300 年左右首先提出的利用辗转相除法求最大公约数的步骤如下:第一步:用较大的数 除以较小的数 得到一个商 和一个余数mn0q;0r第二步:若 ,则 为 的最大公约数;若 ,则用除数0rn, 0r除以余数 得到一个商 和一个余数 ;n1q1r第三步:若 ,则 为 的最大公约数;若 ,则用除数1rr,m1r除以余数 得到一个商 和一个余数 ;0r 22r依次计算直至 ,此时所得到的 即为所求的最大公约数0nr1n练习:利用辗转相除法求两数 4081 与 20723 的最大公约数解:2.更相减损术我
4、国早期也有解决求最大公约数问题的算法,就是更相减损术更相减损术求最大公约数的步骤如下:可半者半之,不可半者,副置分母之数,以少减多,更相减损,求其等也,以等数约之翻译出来为:第一步:任意给出两个正数;判断它们是否都是偶数若是,用 2 约简;若不是,执行第二步第二步:以较大的数减去较小的数,接着把较小的数与所得的差比较,并以大数减小数继续这个操作,直到所得的数相等为止,则这个数(等数)就是所求的最大公约数例 2 用更相减损术求 98 与 63 的最大公约数.解:练习:用更相减损术求两个正数 84 与 72 的最大公约数3.比较辗转相除法与更相减损术的区别(1)都是求最大公约数的方法,计算上辗转相
5、除法以除法为主,更相减损术以减法为主,计算次数上辗转相除法计算次数相对较少,特别当两个数字大小区别较大时计算次数的区别较明显(2)从结果体现形式来看,辗转相除法体现结果是以相除余数为 0 则得到,而更相减损术则以减数与差相等而得到三. 辗转相除法的流程图及伪代码利用辗转相除法与更相减损术的计算算法,我们可以设计出程序框图以及 BSAIC 程序来在计算机上实现辗转相除法与更相减损术求最大公约数,下面由同学们设计相应框图并相互之间检查框图与程序的正确性,并在计算机上验证自己的结果(1)辗转相除法的程序框图及程序程序框图:伪代码:用较大的数除以较小的数,得到除式 ,直到 .rnqm)0(n0r四、回顾小结:1辗转相除法与更相减损术中蕴含的数学原理及算法语言的表示;2函数 的含义Mod(,)ab五、课外作业:课本第 31 页第 2 ;课本第 35 页第 13