《算法案例(2课时).ppt》由会员分享,可在线阅读,更多相关《算法案例(2课时).ppt(25页珍藏版)》请在三一办公上搜索。
1、1.3 算法案例,问题1 求204与85的最大公约数,问题2 求8251与6105的最大公约数,204与85的最大公约数是17,8251与6105的最大公约数是34,辗转相除法:我们可以证明,对于任意两个正整数,上述步骤总可以在有限步之后完成,从而总可以用辗转相除的方法求出最大公约数,案例1:辗转相除法,例1 观察用辗转相除法求8251和6105的最大公约数的过程,第一步 用两数中较大的数除以较小的数,求得商和余数8251=61051+2146,结论:8251和6105的公约数就是6105和2146的公约数,求8251和6105的最大公约数,只要求出6105和2146的公约数就可以了。,第二步
2、 对6105和2146重复第一步的做法6105=21462+1813同理6105和2146的最大公约数也是2146和1813的最大公约数。,完整的过程,8251=61051+2146,6105=21462+1813,2146=18131+333,1813=3335+148,333=1482+37,148=374+0,显然37是148和37的最大公约数,也就是8251和6105的最大公约数,例2 用辗转相除法求225和135的最大公约数,显然45是90和45的最大公约数,也就是225和135的最大公约数,思考1:从上面的两个例子可以看出计算的规律是什么?,S1:用大数除以小数,S2:除数变成被除
3、数,余数变成除数,S3:重复S1,直到余数为0,225=1351+90,135=901+45,90=452,辗转相除法中的关键步骤是哪种逻辑结构?辗转相除法是一个反复执行直到余数等于0停止的步骤,这实际上是一个循环结构。,m=n q r,用程序框图表示出右边的过程,r=m MOD n,m=n,n=r,r=0?,是,否,思考2:辗转相除法中的关键步骤是哪种逻辑结构?,算理:可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也,以等数约之。,第一步:任意给顶两个正整数;判断他们是否都是偶数。若是,则用2约简;若不是则执行第二步。,第二步:以较大的数减较小的数,接着把所得的差与较小的
4、数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止,则这个等数就是所求的最大公约数。,更相减损术,例3 用更相减损术求98与63的最大公约数,解:由于63不是偶数,把98和63以大数减小数,并辗转相减,9863356335283528728721217141477,所以,98和63的最大公约数等于7,例1 计算多项式()=当x=5的值,因为()=,所以(5)=55555,=3125625125255,=3906,算法2:,(5)=55555,=5(5555),=5(5(555),=5(5(5(55),=5(5(5(5(5),案例2:秦九韶算法,算法1:,对该多项式按下面的方式进行
5、改写:,要求多项式的值,应该先算最内层的一次多项式的值,即,然后,由内到外逐层计算一次多项式的值,即,这种将求一个n次多项式f(x)的值转化成求n个一次多项式的值的方法,称为秦九韶算法。,例2 已知一个五次多项式为,用秦九韶算法求这个多项式当x=5的值。,解:,将多项式变形:,按由里到外的顺序,依此计算一次多项式当x=5时的值:,所以,当x=5时,多项式的值等于17255.2,你从中看到了怎样的规律?怎么用程序框图来描述呢?,开始,输入f(x)的系数:a0、a1、a2、a3、a4、a5,输入x0,n=0,v=a5,v=vx0+a5-n,n=n+1,n 5?,输出v,结束,否,是,1、什么是进位
6、制?,2、最常见的进位制是什么?除此之外还有哪些常见的进位制?请举例说明,进位制是人们为了计数和运算方便而约定的记数系统。,案例3:进位制,1、我们了解十进制吗?所谓的十进制,它是如何构成的?,十进制由两个部分构成,例如:3721,其它进位制的数又是如何的呢?,第一、它有0、1、2、3、4、5、6、7、8、9十个数字;,第二、它有“权位”,即从右往左为个位、十位、百位、千位等等。,(用10个数字来记数,称基数为10),表示有:1个1,2个十,7个百即7个10的平方,3个千即3个10的立方,2、二进制,二进制是用0、1两个数字来描述的。如11001等,一、二进制的表示方法,区分的写法:11001
7、(2)或者(11001)2,8进制呢?,如7342(8),k进制呢?,anan-1an-2a2a1(k)?,二、二进制与十进制的转换,1、二进制数转化为十进制数,例1 将二进制数110011(2)化成十进制数,解:,根据进位制的定义可知,所以,110011(2)=51。,练习,将下面的二进制数化为十进制数?,(1)11,(2)111,(3)1111,(4)11111,2、十进制转换为二进制(除2取余法:用2连续去除89或所得的商,然后取余数),例2 把89化为二进制数,根据“逢二进一”的原则,有,892441,2(2220)+1,2(2(2110)+0)+1,2(2(2(2 51)+0)+0)
8、+1,5 2 21,2(2(2(2(221)1)0)0)1,89126025124123022021120,所以:89=1011001(2),2(2(2(2321)0)0)1,2(2(242220)0)1,2(2523+2200)1,2624+230021,892441,44 2220,22 2110,11 2 51,2(2(2(2(2 21)+1)+0)+0)+1,所以892(2(2(2(2 2 1)1)0)0)1,余数,注意:1.最后一步商为0,2.将上式各步所得的余数从下到上排列,得到:89=1011001(2),1,0,0,1,1,0,1,2,2,2,2,2,2,2,5,2,1,0,1
9、1,22,48,89,!,练习,将下面的十进制数化为二进制数?,(1)10,(2)20,(3)128,(4)256,例4 把89化为五进制数,3、十进制转换为其它进制,解:,根据除k取余法,以5作为除数,相应的除法算式为:,所以,89=324(5)。,将k进制数a转换为十进制数(共有 n位)的程序,a=anan-1 a3a2a1(k),=ank(n-1)+an-1k(n-2)+a3k2+a2k1+a1k0,b=a1k0,b=a2k1+b,b=a3k2+b,b=ankn-1+b,ai=GET aiGET函数用于取出a的右数第i位数,INPUT a,k,n,i=1,b=0,WHILE i=n,t=GET ai,b=t*k(i-1)+b,i=i+1,WEND,PRINT b,END,i=i+1,i=1,小结,2、掌握二进制与十进制之间的转换,1、进位制的概念,再见,