当前位置:文档之家› 知识讲解_算法案例_基础

知识讲解_算法案例_基础

算法案例【学习目标】1.理解辗转相除法与更相减损术中蕴含的数学原理,并能根据这些原理进行算法分析;2.基本能根据算法语句与程序框图的知识设计完整的程序框图并写出算法程序;3.了解秦九韶算法的计算过程,并理解利用秦九韶算法可以减少计算次数提高计算效率的实质;4.了解各种进位制与十进制之间转换的规律,会利用各种进位制与十进制之间的联系进行各种进位制之间的转换.【要点梳理】要点一、辗转相除法也叫欧几里德算法,它是由欧几里德在公元前300年左右首先提出的.利用辗转相除法求最大公约数的步骤如下:第一步:用较大的数m除以较小的数n得到一个商q0和一个余数r0;第二步:若r0=0,则n为m,n的最大公约数;若r0≠0,则用除数n除以余数r0得到一个商q1和一个余数r1;第三步:若r1=0,则r0为m,n的最大公约数;若r1≠0,则用除数r0除以余数r1得到一个商q2和一个余数r2;……依次计算直至r n=0,此时所得到的r n-1即为所求的最大公约数.用辗转相除法求最大公约数的程序框图为:程序:INPUT “m=”;m INPUT “n=”;n IF m<n THEN x=m m=n n=x END IF r=m MOD n WHILE r<>0 r=m MOD n m=n n=r WEND PRINT n END要点诠释:辗转相除法的基本步骤是用较大的数除以较小的数,考虑到算法中的赋值语句可以对同一变量多次赋值,我们可以把较大的数用变量m 表示,把较小的数用变量n 表示,这样式子)0(n r r q n m <≤+⋅=就是一个反复执行的步骤,因此可以用循环结构实现算法. 要点二、更相减损术我国早期也有解决求最大公约数问题的算法,就是更相减损术.更相减损术求最大公约数的步骤如下:可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也.以等数约之.翻译出来为:第一步:任意给出两个正整数;判断它们是否都是偶数.若是,用2约简;若不是,执行第二步. 第二步:以较大的数减去较小的数,接着把较小的数与所得的差比较,并以大数减小数.继续这个操作,直到所得的数相等为止,则这个数(等数)就是所求的最大公约数.理论依据:由r b a r b a +=→=-,得b a ,与r b ,有相同的公约数 更相减损术一般算法:第一步,输入两个正整数)(,b a b a >;第二步,如果b a ≠,则执行3S ,否则转到5S ; 第三步,将b a -的值赋予r ;第四步,若r b >,则把b 赋予a ,把r 赋予b ,否则把r 赋予a ,重新执行2S ; 第五步,输出最大公约数b . 程序:INPUT “a=”,a INPUT “b=”,b WHILE a<>b IF a>=b a=a-b;ELSE b=b-a WEND ENDPRINT b 或者INPUT “请输入两个不相等的正整数”;a ,b i=0WHILE a MOD 2=0 AND b MOD 2=0 a=a/2 b=b/2 i=i+1 WEND DOIF b<a THEN t=a a=b b=t END IF c=a -b a=b b=cLOOP UNTIL a=b PRINT a^i END要点诠释:用辗转相除法步骤较少,而更相减损术虽然有些步骤较长,但运算简单. 要点三、秦九韶计算多项式的方法12121012312102312101210()()(())((()))n n n n n n n n n n n n n n n n n n n f x a x a x a x a x a a x a x a x a x a a x a x a x a x a a x a x a x a x a --------------=+++++=+++++=+++++==+++++令12(1)((()))k n n n n k n k v a x a x a x a x a -----=+++++,则有01nk k n kv a v v x a --=⎧⎨=+⎩,其中n k ,2,1=.这样,我们便可由0v 依次求出n v v v ,,21;1323212101,,,a x v v a x v v a x v v a x v v n n n n n +=+=+=+=----要点诠释:显然,用秦九韶算法求n 次多项式的值时只需要做n 次乘法和n 次加法运算 要点四、进位制进位制是一种记数方式,用有限的数字在不同的位置表示不同的数值.可使用数字符号的个数称为基数,基数为n ,即可称n 进位制,简称n 进制.现在最常用的是十进制,通常使用10个阿拉伯数字0-9进行记数.对于任何一个数,我们可以用不同的进位制来表示.比如:十进数57,可以用二进制表示为111001,也可以用八进制表示为71、用十六进制表示为39,它们所代表的数值都是一样的.表示各种进位制数一般在数字右下角加注来表示,如111001(2)表示二进制数,34(5)表示5进制数. 1.k 进制转换为十进制的方法:012211)(0121a k a k a k a k a a a a a a a n n n n k n n +⨯+⨯++⨯+⨯=--- ,把k 进制数a 转化为十进制数b 的算法程序为:INPUT “ a,k,n=”;a,k,n i=1 b=0WHILE i<=n t=GET a[i] b=b+t*k^(i-1) i=i+1 WEND PRINT b END2.十进制转化为k 进制数b 的步骤为:第一步,将给定的十进制整数除以基数k ,余数便是等值的k 进制的最低位; 第二步,将上一步的商再除以基数k ,余数便是等值的k 进制数的次低位;第三步,重复第二步,直到最后所得的商等于0为止,各次所得的余数,便是k 进制各位的数,最后一次余数是最高位,即除k 取余法.要点诠释:1、在k 进制中,具有k 个数字符号.如二进制有0,1两个数字.2、在k 进制中,由低位向高位是按“逢k 进一”的规则进行计数.3、非k 进制数之间的转化一般应先转化成十进制,再将这个十进制数转化为另一种进制的数,有的也可以相互转化.【典型例题】类型一:辗转相除法与更相减损术例1.用辗转相除法求下列两数的最大公约数,并且用更相减损术检验你的结果: (1)80,36;(2)294,84. 【答案】(1)4(2)42【解析】(1)80=36×2+8,36=8×4+4.8=4×2+0.即80与36的最大公约数是4.验证:80-36=44,44-36=8.36-8=28.28-8=20.20-8=12.12-8=4.8-4=4.∴80与36的最大公约数为4.(2)294=84×3+42,84=42×2.即294与84的最大公约数是42.验证:∵294与84都是偶数可同时除以2,即取147与42的最大公约数后再乘2.147-42=105.105-42=63.63-42=21.42-21=21.∴294与84的最大公约数为21×2=42.【总结升华】比较辗转相除法与更相减损术的区别(1)都是求最大公约数的方法,计算上辗转相除法以除法为主,更相减损术以减法为主,计算次数上辗转相除法计算次数相对较少,特别当两个数字大小区别较大时计算次数的区别较明显;(2)从结果体现形式来看,辗转相除法体现结果是以相除余数为0则得到,而更相减损术则以减数与差相等而得到.由该题可以看出,辗转相除法得最大公约数的步骤较少.对比两种方法控制好算法的结束,辗转相除法是到达余数为0,更相减损术是到达减数和差相等.举一反三:【变式1】(1)用辗转相除法求123和48的最大公约数.(2)分别用辗转相除法和更相减损术求105与357的最大公约数.【答案】21【解析】(1)123=2×48+2748=1×27+2127=1×21+621=3×6+36=2×3+0最后6能被3整除,得123和48的最大公约数为3.(2)辗转相除法:357=105×3+42,105=42×2+21,42=21×2.故105与357的最大公约数为21.更相减损术:357-105=252,252-105=147,147-105=42,105-42=63,63-42=21,42-21=21.故105与357的最大公约数为21.例2.求三个数:168,54,264的最大公约数.【思路点拨】运用更相减损术或辗转相除法,先求168与54的最大公约数a ,再求a 与264的最大公约数.【答案】6 【解析】采用更相减损术先求168与54的最大公约数.(168,54)→(114,54)→(60,54)→(6,54)→(6,48)→(6,42)→(6,36)→(6,30)→(6,24)→(6,18)→(6,12)→(6,6) 故168与54的最大公约数为6.采用辗转相除法求6和264的最大公约数.因为264=44×6+0,所以6为264与6的最大公约数,也是三个数的最大公约数.【总结升华】求最大公约数通常有两种方法:一是辗转相除法;二是更相减损术,对于3个数的最大公约数的求法,则是先求其中两个数的最大公约数m ,再求m 与第三个数的最大公约数.同样可推广到求3个数以上的数的最大公约数.举一反三:【变式1】求三个数324,243,135的最大公约数. 【解析】∵324=243×1+81, 243=81×3+0,∴324与243的最大公约数为81. 又135=81×1+54, 81=54×1+27, 54=27×2+0,∴81与135的最大公约数为27.∴三个数324,243,135的最大公约数为27. 更相减损术: ∵324-243=81, 243-81=162, 162-81=81,∴81是324和243的最大公约数. 又135-81=54, 81-54=27, 54-27=27,∴27是81与135的最大公约数.∴三个数324,243,135的最大公约数为27.类型二:秦九韶算法 例3.已知一个一元五次多项式为5432()52 3.5 2.6 1.70.8f x x x x x x =++-+-,用秦九韶算法求这个多项式当x=5时的值.【思路点拨】可根据秦九韶算法原理,先将所给的多项式进行改写,然后由内向外逐层计算即可. 【答案】17255.2 【解析】5432()52 3.5 2.6 1.70.8f x x x x x x =++-+- ((((52) 3.5) 2.6) 1.7)0.8x x x x x =++-+-,v 1=5×5+2=27,v 2=27×5+3.5=138.5, v 3=138.5×5-2.6=689.9, v 4=689.9×5+1.7=3451.2, v 5=3451.2×5-0.8=17255.2.所以,当x=5时,多项式的值等于17255.2.【总结升华】利用秦九韶算法计算多项式的值的关键是能正确地将所给多项式改写,然后由内向外逐层计算,由于下一次计算需用到上一次的结果,故应认真、细心,确保中间结果的准确性. 举一反三:【变式1】用秦九韶算法求多项式764()85321f x x x x x =++++当x=2时的值. 【答案】1397 【解析】765432()85030021((((((85)0)3)0)0)2)1f x x x x x x x x x x x x x x x =++⋅++⋅+⋅++=+++++++.v 0=8,v 1=8×2+5=21, v 2=21×2 4-0=42, v 3=42×2 4-3=87, v 4=87×2+0=174, v 5=174×2+0=348, v 6=348×2+2=698, v 7=698×2+1=1397,所以,当x=2时,多项式的值为1397.【变式2】用秦九韶算法计算多项式65432()654327f x x x x x x x =++++++在x=0.4时的值时,需做加法和乘法的次数和是( )A .10B .9C .12D .8 【答案】 C【解析】 ()(((((65)4)3)2)1)7f x x x x x x x =++++++.∴加法6次,乘法6次, ∴6+6=12(次),故选C .类型三:进位制例4.把87化为二进制数. 【答案】1010111(2)【解析】 因为87=2×43+1,43=2×21+1,21=2×10+1,10=2×5+0,5=2×2+1,2=2×1+0.1=2×0+1.所以87=2×(2×(2×(2×(2×2+1)+0)+1)+1)+1 =2×(2×(2×(2×(22+1)+0)+1)+1)+1 =…=1×26+0×25+1×24+0×23+1×22+1×2+1 =1010111(2). 【总结升华】(1)本题的算法叫除2取余法.上述解法可以推广到把十进制数化为k 进制数的算法,称为除k 取余法.(2)本题还可以用下面的除法算式表示如图: 把上式各步所得的余数从下到上排列,得87=1010111(2).举一反三: 【变式】(1)将十进制数2l 转化为五进制数. (2)把十进制数48转化为二进制数.【解析】(1)用除5取余法,可得∴21=41(5).(2) 将十进制数48转化为二进制数的除法算式如图所示. 把上式中各步所得的余数从下到上排列,得到48=110000(2).【总结升华】在解答过程中常会出现把上图中各步所得的余数从上到下排列的错误,应注意避免. 例5.把下列各数化为十进制数.(1)20121(3);(2)20121(4). 【答案】(1)178 (2)537【解析】 (1)20121(3)=2×34+0×33+1×32+2×3+1=178. (2)20121(4)=2×44+0×43+1×42+2×4+1=537. 【总结升华】k 进制数转化为十进制数的方法是把k 进制数表示为各位上的数字与k 的幂的乘积之和,从右边起,第i 位数字对应k 的幂为1i k-.举一反三:【变式1】在十进制中,01232004410010010210=⨯+⨯+⨯+⨯,那么在五进制中数码2 004折合成十进制为( )A .29B .254C .602D .2 004 【答案】B【解析】0123200445050525254=⨯+⨯+⨯+⨯=,故选B .【变式2】把十进制数48转化为二进制数. 【答案】110000(2)【解析】 将十进制数48转化为二进制数的除法算式如图所示. 把上式中各步所得的余数从下到上排列,得到48=110000(2).【总结升华】在解答过程中常会出现把图中各步所得的余数从上到下排列的错误,应注意避免.。

相关主题