算法案例之辗转相除法和更相减损法
- 格式:ppt
- 大小:100.00 KB
- 文档页数:9
Python实现辗转相除法和更相减损法求最大公约数在Python中实现辗转相除法和更相减损法相对简单。
以下是两种算法的Python实现示例:辗转相除法(欧几里得算法)def gcd_euclidean(a, b):"""使用辗转相除法(欧几里得算法)计算最大公约数"""while b != 0:a, b = b, a % breturn a# 示例print(gcd_euclidean(48, 18)) # 输出: 6在这个实现中,我们不断地将较小的数(b)赋值给较大的数(a),并将较大数除以较小数的余数赋值给较小数(b),直到b变为0。
此时,a就是两数的最大公约数。
更相减损法def gcd_subtraction(a, b):"""使用更相减损法计算最大公约数"""while a != b:if a > b:a -= belse:b -= areturn a# 示例print(gcd_subtraction(48, 18)) # 输出: 6在这个实现中,我们不断地从较大的数中减去较小的数,直到两数相等。
此时,相等的数就是两数的最大公约数。
注意事项●在Python中,由于整数除法(//)和模运算(%)的存在,辗转相除法可以非常高效地实现。
●更相减损法虽然直观,但在处理大数时可能效率较低,因为它需要更多的迭代步骤来找到最大公约数。
●在实际应用中,推荐使用辗转相除法来计算最大公约数,因为它更加高效且易于实现。
这两种算法都是计算最大公约数的经典方法,掌握它们对于理解数论和算法设计都非常重要。
辗转相除法与更相减损术学习目标1.理解辗转相除法与更相减损术中蕴含的数学原理,并能根据这些原理进行算法分析。
2.基本能根据算法语句与程序框图的知识设计完整的程序框图并写出算法程序。
学习重难点重点:理解辗转相除法与更相减损术求最大公约数的方法。
难点:把辗转相除法与更相减损术的方法转换成程序框图与程序语言。
学法与学习用具学法:在理解最大公约数的基础上去发现辗转相除法与更相减损术中的数学规律,并能模仿已经学过的程序框图与算法语句设计出辗转相除法与更相减损术的程序框图与算法程序。
学习用具:电脑,计算器,图形计算器学习设想(一)创设情景,揭示课题1.教师首先提出问题:在初中,我们已经学过求最大公约数的知识,你能求出18与30的公约数吗?2.接着教师进一步提出问题,我们都是利用找公约数的方法来求最大公约数,如果公约数比较大而且根据我们的观察又不能得到一些公约数,我们又应该怎样求它们的最大公约数?比如求8251与6105的最大公约数?这就是我们这一堂课所要探讨的内容。
(二)研探新知1.辗转相除法例1求两个正数8251和6105的最大公约数。
(分析:8251与6105两数都比较大,而且没有明显的公约数,如能把它们都变小一点,根据已有的知识即可求出最大公约数)解:8251=6105×1+2146显然8251的最大公约数也必是2146的约数,同样6105与2146的公约数也必是8251的约数,所以8251与6105的最大公约数也是6105与2146的最大公约数。
6105=2146×2+18132146=1813×1+3331813=333×5+148333=148×2+37148=37×4+0则37为8251与6105的最大公约数。
以上我们求最大公约数的方法就是辗转相除法。
也叫欧几里德算法,它是由欧几里德在公元前300年左右首先提出的。
利用辗转相除法求最大公约数的步骤如下:第一步:用较大的数m 除以较小的数n 得到一个商0q 和一个余数0r ;第二步:若0r =0,则n 为m ,n 的最大公约数;若0r ≠0,则用除数n 除以余数0r 得到一个商1q 和一个余数1r ;第三步:若1r =0,则1r 为m ,n 的最大公约数;若1r ≠0,则用除数0r 除以余数1r 得到一个商2q 和一个余数2r ;……依次计算直至n r =0,此时所得到的1n r 即为所求的最大公约数。
第一课时 1.3.1 算法案例---辗转相除法与更相减损术教学要求:理解辗转相除法与更相减损术中蕴含的数学原理,并能根据这些原理进行算法分析; 基本能根据算法语句与程序框图的知识设计出辗转相除法与更相减损术完整的程序框图并写出它们的算法程序.教学重点:理解辗转相除法与更相减损术求最大公约数的方法.教学难点:把辗转相除法与更相减损术的方法转换成程序框图与程序语言.教学过程:一、复习准备:1. 回顾算法的三种表述:自然语言、程序框图(三种逻辑结构)、程序语言(五种基本语句).2. 提问:①小学学过的求两个数最大公约数的方法?(先用两个公有的质因数连续去除,一直除到所得的商是互质数为止,然后把所有的除数连乘起来.)口算出36和64的最大公约数. ②除了用这种方法外还有没有其它方法?6436128=⨯+ ,36∴和28的最大公约数就是64和36的最大公约数,反复进行这个步骤,直至842=⨯,得出4即是36和64的最大公约数.二、讲授新课:1. 教学辗转相除法:例1:求两个正数1424和801的最大公约数.分析:可以利用除法将大数化小,然后逐步找出两数的最大公约数. (适用于两数较大时) ①以上我们求最大公约数的方法就是辗转相除法,也叫欧几里德算法,它是由欧几里德在公元前300年左右首先提出的. 利用辗转相除法求最大公约数的步骤如下:(1)用较大的数m 除以较小的数n 得到一个商0S 和一个余数0R ;(2)若0R =0,则n 为m ,n的最大公约数;若0R ≠0,则用除数n 除以余数0R 得到一个商1S 和一个余数1R ;(3)若1R =0,则1R 为m ,n 的最大公约数;若1R ≠0,则用除数0R 除以余数1R 得到一个商2S 和一个余数2R ;……依次计算直至n R =0,此时所得到的1n R -即为所求的最大公约数.②由上述步骤可以看出,辗转相除法中的除法是一个反复执行的步骤,且执行次数由余数是否等于0来决定,所以我们可以把它看成一个循环体,它的程序框图如右图:(师生共析,写出辗转相除法完整的程序框图和程序语言)练习:求两个正数8251和2146的最大公约数. (乘法格式、除法格式)2. 教学更相减损术:我国早期也有求最大公约数问题的算法,就是更相减损术. 在《九章算术》中有更相减损术求最大公约数的步骤:可半者半之,不可半者,副置分母•子之数,以少减多,更相减损,求其等也,以等数约之.翻译为:(1)任意给出两个正数;判断它们是否都是偶数. 若是,用2约简;若不是,执行第二步.(2)以较大的数减去较小的数,接着把较小的数与所得的差比较,并以大数减小数. 继续这个操作,直到所得的数相等为止,则这个数(等数)就是所求的最大公约数. 例2:用更相减损术求91和49的最大公约数.分析:更相减损术是利用减法将大数化小,直到所得数相等时,这个数(等数)就是所求的最大公约数. (反思:辗转相除法与更相减损术是否存在相通的地方)练习:用更相减损术求72和168的最大公约数.3. 小结:辗转相除法与更相减损术及比较①都是求最大公约数的方法,辗转相除法以除法为主,更相减损术以减法为主,计算次数上辗转相除法计算次数相对较少;②结果上,辗转相除法体现结果是以相除余数为0得到,而更相减损术则以减数与差相等而得到.三、巩固练习:1、练习:教材P35第1题 2、作业:教材P38第1题第二课时 1.3.2 算法案例---秦九韶算法教学要求:了解秦九韶算法的计算过程,并理解利用秦九韶算法可以减少计算次数、提高计算效率的实质;理解数学算法与计算机算法的区别,理解计算机对数学的辅助作用. 教学重点:秦九韶算法的特点及其程序设计.教学难点:秦九韶算法的先进性理解及其程序设计.教学过程:一、复习准备:1. 分别用辗转相除法和更相减损术求出两个正数623和1513的最大公约数.2. 设计一个求多项式5432()254367f x x x x x x =--+-+当5x =时的值的算法. (学生自己提出一般的解决方案:将5x =代入多项式进行计算即可)提问:上述算法在计算时共用了多少次乘法运算?多少次加法运算?此方案有何优缺点?(上述算法一共做了5+4+3+2+1=15次乘法运算,5次加法运算. 优点是简单、易懂;缺点是不通用,不能解决任意多项式的求值问题,而且计算效率不高.)二、讲授新课:1. 教学秦九韶算法:① 提问:在计算x 的幂值时,可以利用前面的计算结果,以减少计算量,即先计算2x ,然后依次计算2x x ⋅,2()x x x ⋅⋅,2(())x x x x ⋅⋅⋅的值,这样计算上述多项式的值,一共需要多少次乘法,多少次加法?(上述算法一共做了4次乘法运算,5次加法运算)② 结论:第二种做法与第一种做法相比,乘法的运算次数减少了,因而能提高运算效率,而且对于计算机来说,做一次乘法所需的运算时间比做一次加法要长得多,因此第二种做法能更快地得到结果.③ 更有效的一种算法是:将多项式变形为:5432()254367((((25)4)3)6)7f x x x x x x x x x x x =--+-+=--+-+,依次计算2555⨯-=,55421⨯-=,2153108⨯+=,10856534⨯-=,534572677⨯+= 故(5)2677f =. ――这种算法就是“秦九韶算法”. (注意变形,强调格式)④ 练习:用秦九韶算法求多项式432()2351f x x x x x =+-++当4x =时的值. (学生板书→师生共评→教师提问:上述算法共需多少次乘法运算?多少次加法运算?)⑤ 如何用秦九韶算法完成一般多项式1110()n n n n f x a x a x a x a --=++++ 的求值问题?改写:11101210()(()))n n n n n n n f x a x a x a x a a x a x a x a x a ----=++++=+++++ .首先计算最内层括号内一次多项式的值,即11n n v a x a -=+,然后由内向外逐层计算一次多项式的值,即212n v v x a -=+,323n v v x a -=+, ,10n n v v x a -=+.⑥ 结论:秦九韶算法将求n 次多项式的值转化为求n 个一次多项式的值,整个过程只需n 次乘法运算和n 次加法运算;观察上述n 个一次式,可发出k v 的计算要用到1k v -的值,若令0n v a =,可得到下列递推公式:01,(1,2,,)n kk n k v a v v x a k n --=⎧⎨=+=⎩ . 这是一个反复执行的步骤,因此可用循环结构来实现.⑦ 练习:用秦九韶算法求多项式5432()52 3.5 2.6 1.70.8f x x x x x x =++-+-当5x =时的值并画出程序框图.2. 小结:秦九韶算法的特点及其程序设计三、巩固练习:1、练习:教材P35第2题 2、作业:教材P36第2题第三课时 1.3.3 算法案例---进位制教学要求:了解各种进位制与十进制之间转换的规律,会利用各种进位制与十进制之间的联系进行各种进位制之间的转换;学习各种进位制转换成十进制的计算方法,研究十进制转换为各种进位制的除k 去余法,并理解其中的数学规律.教学重点:各种进位制之间的互化.教学难点:除k 取余法的理解以及各进位制之间转换的程序框图及其程序的设计. 教学过程:一、复习准备:1. 试用秦九韶算法求多项式52()42f x x x =-+当3x =时的值,分析此过程共需多少次乘法运算?多少次加法运算?2. 提问:生活中我们常见的数字都是十进制的,但是并不是生活中的每一种数字都是十进制的.比如时间和角度的单位用六十进位制,电子计算机用的是二进制,旧式的秤是十六进制的,计算一打数值时是12进制的......那么什么是进位制?不同的进位制之间又有什么联系呢?二、讲授新课:1. 教学进位制的概念:① 进位制是人们为了计数和运算方便而约定的记数系统,“满几进一”就是几进制,几进制的基数就是几. 如:“满十进一”就是十进制,“满二进一”就是二进制 . 同一个数可以用不同的进位制来表示,比如:十进数57,可以用二进制表示为111001,也可以用八进制表示为71、用十六进制表示为39,它们所代表的数值都是一样的. 表示各种进位制数一般在数字右下脚加注来表示,如上例中:(2)(8)(16)1110017139==② 一般地,任意一个k 进制数都可以表示成不同位上数字与基数的幂的乘积之和的形式,即110110()110110...(0,0,...,,)n n n n k n n n n a a a a a k a a a k a k a ka k a k ----<<≤<=⨯+⨯+⨯+⨯ . 如:把(2)110011化为十进制数,(2)110011=1⨯25+1⨯24+0⨯23+0⨯22+1⨯21+1⨯20=32+16+2+1=51. 把八进制数(8)7348化为十进制数,3210(8)7348783848883816=⨯+⨯+⨯+⨯=.2. 教学进位制之间的互化:①例1:把二进制数(2)1001101化为十进制数.(学生板书→教师点评→师生共同总结将非十进制转为十进制数的方法)分析此过程的算法过程,编写过程的程序语言. 见P34②练习:将(5)2341、(3)121转化成十进制数.③例2、把89化为二进制数.分析:根据进位制的定义,二进制就是“满二进一”,可以用2连续去除89或所得商,然后取余数. (教师板书)上述方法也可以推广为把十进制化为k 进制数的算法,这种算法成为除k 取余法. ④练习:用除k 取余法将89化为四进制数、六进制数.⑤例3、把二进制数(2)11011.101化为十进制数.解:43210123(2)11011.101121202121212021227.625---=⨯+⨯+⨯+⨯+⨯+⨯+⨯+⨯=.(小数也可利用上述方法化进行不同进位制之间的互化. )变式:化为八进制→方法:进制互化3. 小结:进位制的定义;进位制之间的互化.三、巩固练习:1、练习:教材P35第3题 2、作业:教材P38第3题第四课时 1.3.4 生活中的算法实例教学要求:通过生活实例进一步了解算法思想.教学重点:生活实例的算法分析.教学难点:算法思想的理解.教学过程:一、复习准备:1. 前面学习了哪几种算法案例?每种算法的作用及操作方法是怎样的?2. 算法思想在我们的生活中无处不在,如何利用我们所学习的知识解决生活中的实际问题?二、讲授新课:1. 霍奇森算法:提问:同学们经常会面对一个共同的问题,就是有时有太多的事情要做. 例如,你可能要面临好几门课的作业的最后期限,你如何合理安排以确保每门课的作业都能如期完成?如果根本不可能全部按期完成,你该怎么办?(霍奇森算法可以使得迟交作业的数目减到最小. 这一算法已经广泛应用于工业生产安排的实践中.)例如:当你拿到下面这组数据后,你会如何安排你的时间,以确保每门课的作业都能如期完成?可用自然语言描述为:①把这些作业按到期日的顺序从左到右排列,从最早到期的到最晚到期的;②假设从左到右一项一项做这些作业的话,计算出从开始到完成某一项作业时所花的时间. 依次做此计算直到完成了所列表中的全部作业而没有一项作业会超期,停止;或你算出某项作业将会超期,继续第三步;③考虑第一项将会超期的作业以及它左边的所有作业,从中取出花费时间最长的那项作业,并把它从表中去掉;④回到第二步,并重复第二到四步,直到做完.2. 孙子问题:韩信是秦末汉初的著名军事家. 据说有一次汉高祖刘邦在卫士的簇拥下来到练兵场,刘邦问韩信有什么办法,不要逐个报数,就能知道场上士兵的人数.韩信先令士兵排成了3列纵队进行操练,结果有2人多余;接着他立刻下令将队形改为5列纵 队,这一改又多出3人;随后他又下令改为7列纵队,这一次又剩下2人无法成整行. 由此得出共有士兵2333人. 如何用现在的算法思想分析这一过程?《孙子算经》中给出了它的具体解法,其步骤是:选定57⨯的倍数,被3除余1,即70;选定37⨯的一个倍数,被5除余1,即21;选定35⨯的一个倍数,被7除余1,即15. 然后按下式计算702213152105m p =⨯+⨯+⨯-,式中105为3,5,7的最小公倍数,p 为适当的整数,使得0105m <≤,这里取2p =.求解“孙子问题”的一种普通算法:第一步:2m =.第二步:若m 除以3余2,则执行第三步;否则1m m =+,执行第二步.第三步:若m 除以5余3,则执行第四步;否则1m m =+,执行第二步.第四步:若m 除以7余2,则执行第五步;否则1m m =+,执行第二步.第五步:输出m .3. 小结:算法的基本思想.三、巩固练习: 作业:教材P38第3题。
教师课时教案问题与情境及教师活动学生活动思考3:上述求两个正整数的最大公约数的方法称为辗转相除法或欧几里得算法.一般地,用辗转相除法求两个正整数m, n的最大公约数,可以用什么算法?其算法步骤如何设计?辗转相除法,就是对于给定的两个正整数,用较大的数除以较小的数,若余数不为零,则将余数和较小的数构成新的一对数,继续上面的除法,直到大数被小数除尽为止,这时的较小的数即为原来两个数的最大公约数.思考4:你能否把辗转相除法编程?辗转相除法求两个数的最大公约数,其算法步骤可以描述如下:第一步,给定两个正整数m, n.第二步,求余数I•:计算m除以n,将所得余数存放到变量I■中.第三步,更新被除数和余数:m=n, n=r.第四步,判断余数「是否为0.若余数为0,则输出结果;否则转向第二步继续循坏执行.程序框图如下图:程序:过程及方法思考4:你能用当型循环结构构造算法,求两个正整数的最大公约数吗?试画出程序框图和程序.当型循坏结构的程序框图如右图程序:探究二:更相减损术思考1:设两个正整数m>n,若m-n=k,则m 与 n 的最大公约数和n 与k 的最大公约数相 等.反复利用这个原理,可求得98与63 的最大公约数为多少? 解:由于63不是偶数,把98和63以大数减小数, 并辗转相减,如下图所示. 所以,98和63的最大公约数等于7. 思考2:上述求两个正整数的最大公约数的方法称 为更相减损术•一般地,用更相减损术求两个正整数m, n 的最 大公约数,可以用什么逻辑结构来构造算法? 更相减损术,就是对于给定的两个正整数,用较大的数减去较小 的数,然后将差和较小的 数构成新的一对数, 继续上面的减法, 直到差和较小的数相等, 此时相等的两数即为原来 两个数的最大公约数. 思考3:你能否把更相减损术编程? 探究三:辗转相除法与更相减损术的区别(1) 都是求最大公约数的方法,计算上辗转相除法以除法为主,更相减损术以减法为主,计算次数上辗转相除法计算次数相对较少, 特别当两个数字大小区别较大时计算次数的区别较明显。
更相减损术和辗转相除法原理
更相减损术是求两个数的最大公约数的一种方法。
其原理是:两个数a和b(a>b)的最大公约数等于a-b的差与b的最大公
约数。
逐步减少较大数,直到两个数相等时,即为最大公约数。
例如,求48和36的最大公约数:
48-36=12
36-12=24
24-12=12
12-12=0
当两个数相等时,即为最大公约数为12。
辗转相除法是求两个数的最大公约数的另一种方法。
其原理是:将较大数除以较小数得到商和余数,然后将较小数和余数再次除以余数得到商和新的余数,如此循环迭代,直到余数为零。
此时,较小的非零数即为最大公约数。
例如,求48和36的最大公约数:
48÷36=1 (12)
36÷12=3 0
最大公约数为12。
需要注意的是,辗转相除法通常比更相减损术更高效。