《算法案例1辗转相除法与相减损术.ppt》由会员分享,可在线阅读,更多相关《算法案例1辗转相除法与相减损术.ppt(18页珍藏版)》请在课桌文档上搜索。
1、1.3 算法案例,1.3.4 十进制化K进制,1.3.1 辗转相除法和更相减损术,1.3.2 秦九韶算法,1.3.3 K进制化十进制,1.3 算法案例,1.3.1 辗除法和更相减损术,一、辗转相除法,思考1:18与30的最大公约数是多少?你是怎样得到的?,先用两个数公有的质因数连续去除,一直除到所得的商是互质数为止,然后把所有的除数连乘起来即为最大公约数.,思考2:对于8251与6105这两个数,它们的最大公约数是多少?你是怎样得到的?,由于它们公有的质因数较大,利用上述方法求最大公约数就比较困难.有没有其它的方法可以较简单的找出它们的最大公约数呢?,思考3:注意到8251=61051+214
2、6,那么8251与6105这两个数的公约数和6105与2146的公约数有什么关系?,我们发现6105=21462+1813,同理,6105与2146的公约数和2146与1813的公约数相等.,思考4:重复上述操作,你能得到8251与6105这两个数的最大公约数吗?,2146=18131+333,,148=374+0.,333=1482+37,,1813=3335+148,,8251=61051+2146,,6105=21462+1813,,上述求两个正整数的最大公约数的方法称为辗转相除法或欧几里得算法.,第一步,给定两个正整数m,n(mn).,第二步,计算m除以n所得的余数r.,第三步,m=n
3、,n=r.,第四步,若r=0,则m,n的最大公约数等于m;否则,返回第二步.,思考5:你能把辗转相除法编成一个计算机程序吗?,程序框图,INPUT m,n,DO,r=m MOD n,m=n,n=r,LOOP UNTIL r=0,PRINT m,END,思考6:如果用当型循环结构构造算法,则用辗转相除法求两个正整数m、n的最大公约数的程序框图和程序分别如何表示?,INPUT m,n,WHILE n0,r=m MOD n,m=n,n=r,WEND,PRINT m,END,二、更相减损术,九章算术是中国古代的数学专著,其中的“更相减损术”也可以用来求两个数的最大公约数,即“可半者半之,不可半者,副置
4、分母、子之数,以少减多,更相减损,求其等也.以等数约之.”,意思是:,第一步:任意给定两个正整数,判断它们是否都是偶数.若是,用2约简;若不是,执行第二步.,第二步:以较大的数减去较小的数,接着把差与较小的数比较,并以大数减小数.继续这个操作,直到所得的数相等为止,则这个等数或这个数与约简的数的乘积就是所求的最大公约数.,例1:用更相减损术求98与63的最大公约数.,98-63=35,,14-7=7.,21-7=14,,28-7=21,,35-28=7,,63-35=28,,因为63不是偶数,所以,所以最大公约数是7.,例2 分别用辗转相除法和更相减损术求168与93的最大公约数.,168=9
5、31+75,93=751+18,75=184+3,18=36.,辗转相除法:,更相减损术:,168-93=75,93-75=18,75-18=57,57-18=39,39-18=21,21-18=3,18-3=15,15-3=12,12-3=9,9-3=6,6-3=3.,练习:用更相减损术求两个正整数m,n的最大公约数,可以用什么逻辑结构来构造算法?其算法步骤如何设计?,第一步,给定两个正整数m,n(mn).,第二步,计算m-n所得的差k.,第三步,比较n与k的大小,其中大者用m表示,小者用n表示.,第四步,若m=n,则m,n的最大公约数等于m;否则,返回第二步.,讨论:该算法的程序框图如何表示?,讨论:该程序框图对应的程序如何表述?,INPUT m,n,WHILE mn,k=m-n,IF nk THEN,m=n,n=k,ELSE,m=k,END IF,WEND,PRINT m,END,1、辗转相除法.,小结,2、更相减损术.,