1、第一章 算法初步1.3 算法案例例:求下面两个正整数的最大公约数:( 1)求 25和 35的最大公约数( 2)求 49和 63的最大公约数25( 1) 5535749( 2) 77639所以, 25和 35的最大公约数为 5所以, 49和 63的最大公约数为 7思考:除了用这种方法外还有没有其它方法?例:如何算出 8251和 6105的最大公约数?辗转相除法与更相减损术一、辗转相除法(欧几里得算法)1、定义: 所谓辗转相除法,就是对于给定的两个数,用较大的数除以较小的数。若余数不为零,则将余数和较小的数构成新的一对数,继续上面的除法,直到大数被小数除尽,则这时较小的数就是原来两个数的最大公约数
2、。2、步骤 (以求 8251和 6105的最大公约数的过程为例)第一步 用两数中较大的数除以较小的数,求得商和余数8251=61051+2146结论: 8251和 6105的公约数就是 6105和 2146的公约数,求 8251和 6105的最大公约数,只要求出 6105和 2146的公约数就可以了。第二步 对 6105和 2146重复第一步的做法6105=21462+1813同理 6105和 2146的最大公约数也是 2146和 1813的最大公约数。 完整的过程8251=61051+2146 6105=21462+1813 2146=18131+3331813=3335+148333=14
3、82+37148=374+0例: 用辗转相除法求 225和 135的最大公约数225=1351+90135=901+4590=452显然 37是 148和 37的最大公约数,也就是 8251和6105的最大公约数 显然 45是 90和 45的最大公约数,也就是 225和 135的最大公约数 思考:从上面的两个例子中可以看出计算的规律是什么? S1:用大数除以小数S2:除数变成被除数,余数变成除数S3:重复 S1,直到余数为 0辗转相除法是一个反复执行直到余数等于 0才停止的步骤,这实际上是一个循环结构。m = n q r用程序框图表示出右边的过程r=m MOD nm = nn = rr=0?是
4、 否8251=61051+2146 6105=21462+1813 2146=18131+3331813=3335+148333=1482+37148=374+0思考:辗转相除法中的关键步骤是哪种逻辑结构? 程序框图: 开始输入 m,nr=m MOD nm=nr=0?是否n=r输出 m结束思考:你能把辗转相除法编成一个计算机程序吗?程序:INPUT “m,n=”;m,nDOr=m MOD nm=nn=rLOOP UNTIL r=0PRINT mEND1.定义: 所谓更相减损术,就是对于给定的两个数,用较大的数减去较小的数,然后将差和较小的数构成新的一对数,再用较大的数减去较小的数,反复执行此步
5、骤直到差数和较小的数相等,此时相等的两数便为原来两个数的最大公约数。二、更相减损术2、方法:例 : 用更相减损术求 98与 63的最大公约数 .解:由于 63不是偶数,把 98和 63以大数减小数,并辗转相减 98 63 3563 35 2835 28 728 7 2121 7 1414 7 7所以, 98和 63的最大公约数等于 7 INPUT m, nIF mnIF dn THENm=dELSEm=nn=dEND IFd=m-nWENDd=2 k*dPRINT dEND思考:你能根据更相减损术设计程序,求两个正整数的最大公约数吗?( 1) 设计 求多 项 式当 x=5时 的 值 的算法,并写出程序。( 2)有没有更高效的算法?能否探求更好的算法,来解决任意多 项 式的求解 问题 ?三、秦九韶算法三、秦九韶算法引 导 学生把多 项 式 变 形 为 :思考:从内到外,如果把每一个括号都看成一个常数,那么 变 形后的式子中有哪些 “一次式 ”? x的系数依次是什么?