第12课时5.4算法案例重点难点重点:通过案例分析理解辗转相除法与更相减损术求最大公约数的方法,体会算法思想。难点:把辗转相除法与更相减损术的方法转换成程序框图与程序语言.用心爱心专心1学习要求1.理解辗转相除法与更相减损术中蕴含的数学原理,并能根据这些原理进行算法分析。2.基本能根据算法语句与程序框图的知识设计完整的程序框图并写出算法程序.【课堂互动】问题:写出求两个正整数a,b(a>b)的最大公约数的一个算法。1.辗转相除法公元前3世纪,欧几里得介绍了求两个正整数a,b(a>b)的最大公约数的方法,求出一列数:0,,,,,,121nnrrrrba,这列数从第三项开始,每一项都是前两项相除所得的余数(即),(12nnnrrModr),余数等于0的前一项nr,即是a和b的最大公约数,这种方法称为“欧几里得辗转相除法”。例1求两个正数8251和6105的最大公约数.(分析:8251与6105两数都比较大,而且没有明显的公约数,如能把它们都变小一点,根据已有的知识即可求出最大公约数)【解】8251=6105×1+2146显然8251和2146的最大公约数也必是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的最大公约数.【小结】以上我们求最大公约数的方法就是欧几里得辗转相除法.其求最大公约数的步骤如下:第一步:用较大的数m除以较小的数n得到一个商0q和一个余数0r;第二步:若00r,则n为,mn的最大公约数;若00r,则用除数n除以余数0r得到一个商1q和一个余数1r;第三步:若10r,则1r为,mn的最大公约数;若10r,则用除数0r除以余数1r得到一个商2q和一个余数2r;……依次计算直至0nr,此时所得到的1nr即为所求的最大公约数.【练习】求a=204,b=85的最大公约数,步骤为:S1S2S3所以它们的最大公约数为。算法描述:计算出a÷b的余数r,若r=0,则b为a,b的最大公约数;若r≠0,则把前面的除数b作为新的被除数,把余数r作为新的除数(a,b要重新赋值,a←b,b←r),继续进行上述运算,直到余数为0(用While循环语句,循环的执行条件是r≠0,当r=0时,循环终止),此时的除数即为所求的最大公约数。算法如下:S1输入两个正整数a,b(a>b);S2若Mod(a,b)=0,则转S3;否则,r←Mod(a,b),a←b,b←r,转S2。S3输出最大公约数b;【流程图】用心爱心专心开始b←rYN结束输入a,ba←br←Mod(a,b)Mod(a,b)≠0输出b2【伪代码】2.更相减损法我国早期也有解决求最大公约数问题的算法,就是更相减损术.更相减损术求最大公约数的步骤如下:可半者半之,不可半者,副置分母之数,以少减多,更相减损,求其等也,以等数约之.翻译出来为:第一步:任意给出两个正数;判断它们是否都是偶数.若是,用2约简;若不是,执行第二步.第二步:以较大的数减去较小的数,接着把较小的数与所得的差比较,并以大数减小数.继续这个操作,直到所得的数相等为止,则这个数(等数)就是所求的最大公约数.再从这个角度看一下“求a=204,b=85的最大公约数”的问题,S1步可以等价为等式:34285204。S2步可以等价为等式:1723485。这两步从减法的角度可以理解为:204-85,所得的差与减式中的较小数比较,再用大的数减小的数,循环执行以上步骤,直到结果为0。此时减数就是a和b的最大公约数。这一算法根据它的特点,也可以用循环语句完成。参考代码:/a放较大的数,b放较小的数IfarThena←bb←rElsea←rEndIfr←a–b/确保相减后仍用较大的数减去较小的数EndWhilePrintb用“更相减损法”求多于两个数的最大公约数就可以显示出其优越性【小结】比较辗转相除法与更相减损术的区别(1)都是求最大公约数的方法,计算上辗转相除法以除法为主,更相减损术以减法为主,计算次数上辗转相除法计算次数相对较少,特别当两个数字大小区别较大时计算次数的区别较明显.(2)从结果体现形式来看,辗转相除法体现结果是以相除余数为0则得到,而更相减损术...