算法案例1-辗转相除法.ppt
1.3 算法案例,第一课时,问题提出,1.研究一个实际问题的算法,主要从算法步骤、程序框图和编写程序三方面展开.在程序框图中算法的基本逻辑结构有哪几种?在程序设计中基本的算法语句有哪几种?,2.“求两个正整数的最大公约数”是数学中的一个基础性问题,它有各种解决办法,我们以此为案例,对该问题的算法作一些探究.,辗转相除法与更相减损术,复习引入,1、MOD 表示什么意思?a MOD b ab(a b 是正整数),a=b*q+r,(0=rb),2、求 18与30的最大公约数。,先用两个数公有的质因数连续去除,一直除到所得的商是互质数为止,然后把所有的除数连乘起来即为最大公约数.,思考:若求8251和6105的最大公约数呢?,注意到 8251=61051+2146那么8251和6105这两个数的公约数和6105与2146的公约数有什么关系?,思考:又6105=21462+1813,同理,6105与2146的公约数和2146与1813的公约数相等.重复上述操作,你能得到8251与6105这两个数的最大公约数吗?,2146=18131+333,,148=374+0.,333=1482+37,,1813=3335+148,,8251=61051+2146,,6105=21462+1813,,完整的过程,8251=61051+2146,6105=21462+1813,2146=18131+333,1813=3335+148,333=1482+37,148=374+0,显然37是148和37的最大公约数,也就是8251和6105的最大公约数,辗转相除法(欧几里得算法),例:用辗转相除法求225和135的最大公约数,思考:能不能把辗转相除法设计成算法呢?关键步骤是什么逻辑结构?,用程序框图表示出右边的过程,思考其算法步骤如何设计?,第一步,给定两个正整数m,n(mn).,第二步,计算m除以n所得的余数r.,第三步,m=n,n=r.,第四步,若r=0,则m,n的最大公约数等 于m;否则,返回第二步.,思考:该程序框图和的程序如何表述?,INPUT m,n,DO,r=m MOD n,m=n,n=r,LOOP UNTIL r=0,PRINT m,END,知识探究(二):更相减损术,思考1:设两个正整数mn,若m-n=k,则m与n的最大公约数和n与k的最大公约数相等.反复利用这个原理,可求得98与63的最大公约数为多少?,98-63=35,,14-7=7.,21-7=14,,28-7=21,,35-28=7,,63-35=28,,二、更相减损术,可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也,以等数约之。,第一步:任意给定两个正整数;判断他们是否都是偶数。若是,则用2约简;若不是则执行第二步。,第二步:以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止,则这个等数就是所求的最大公约数。,(1)、九章算术中的更相减损术:,(2)、现代数学中的更相减损术:,1、用更相减损术求两个正数84与72的最大公约数,练习:,思路分析:先约简,再求21与18的最大公约数,然后乘以两次约简的质因数4。,2、求324、243、135这三个数的最大公约数。,思路分析:求三个数的最大公约数可以先求出两个数的最大公约数,第三个数与前两个数的最大公约数的最大公约数即为所求。,比较辗转相除法与更相减损术的区别(1)都是求最大公约数的方法,计算上辗转相除法以除法为主,更相减损术以减法为主,计算次数上辗转相除法计算次数相对较少,特别当两个数字大小区别较大时计算次数的区别较明显。(2)从结果体现形式来看,辗转相除法体现结果是以相除余数为0则得到,而更相减损术则以减数与差相等而得到。,小结,思考题,1、用当型循环结构写出算法;2、试写出更相减损术的算法程序;3、试写出求两个正整数m、n的最小公倍数的程序。,评价一个算法好坏的一个重要标志是运算的次数,如果一个算法从理论上需要超出计算机允许范围内的运算次数,那么这样的算法就只能是一个理论算法.在多项式求值的各种算法中,秦九韶算法是一个优秀算法.,