1.3算法案例ppt
例3 用更相减损术求80与36的最大公 约数.
例4 求325,130,270三个数的最大公约数.
因为325=130×2+65,130=65×2,所以325与130 的最大公约数是65.
因为270=65×4+10,65=10×6+5,10=5×2,所 以65与270最大公约数是5. 故325,130,270三个数的最大公约数是5.
第三步,输入i次项的系数ai.
第四步,v=vx+ai,i=i-1.
第五步,判断i≥0是否成立.若是,则返回第三 步;否则,输出多项式的值v.
开始
程序框图
输入n、an、x的值
v=an i=n-1 i=i-1 v=vx+ai
讨论:请参照程 序框图,写出该算法 程序.
输入ai i≥0? 否 是 输出v 结束
思考3:注意到8251=6105×1+2146,那么8251 与6105这两个数的公约数和6105与2146的公约数有 什么关系?
我们发现6105=2146×2+1813,同理,6105与 2146的公约数和2146与1813的公约数相等. 思考4:重复上述操作,你能得到8251与6105这 两个数的最大公约数吗? 8251=6105×1+2146, 1813=333×5+148, 6105=2146×2+1813, 333=148×2+37, 2146=1813×1+333, 148=37×4+0. 定义:所谓的辗转相除法,就是对于给定的两个数, 用较大的数除以较小的数,若余数不为零,则将余数 和较小的数构成新的数对,继续上面的除法, 直到大数 被小数除尽,则这是较小的数就是原来两个数的最大公约数
例1:用更相减损术求98与63的最大公约数. 因为63不是偶数,所以
98-63=35, 63-35=28, 35-28=7,
28-7=21,
21-7=14, 14-7=7.
所以最大公约数是7.
例2 分别用辗转相除法和更相减损术求168与93 的最大公约数. 辗转相除法:
168=93×1+75, 93=75×1+18, 75=18×4+3, 18=3×6. 更相减损术: 168-93=75, 93-75=18, 75-18=57, 57-18=39, 39-18=21, 21-18=3, 18-3=15, 15-3=12, 12-3=9, 9-3=6, 6-3=3.
练习:用更相减损术求两个正整数m,n的最大公 约数,可以用什么逻辑结构来构造算法?其算法步骤 如何设计?
第一步,给定两个正整数m,n(m>n). 第二步,计算m-n所得的差k. 第三步,比较n与k的大小,其中大者用m表示, 小者用n表示. 第四步,若m=n,则m,n的最大公约数等于m; 否则,返回第二步. 讨论:该算法的程序框图如何表示?
思考4:辗转相除直到何时结束? 主要运用的是哪种算法结构?
辗转相除法是一个反复执行直到余数等于0停止的步骤, 这实际上是一个循环结构 辗转相除法求两个数的最大公约数,其算法可以描述如下: ① 输入两个正整数m和n; ② 求余数r:计算m除以n,将所得余数存放到变量r中; ③更新被除数和余数:m=n,n=r。 ④判断余数r是否为0:若余数为0则输出结果,否则转 向第②步继续循环执行。 如此循环,直到得到结果。
=((anxn-2+an-1xn-3+„+a2)x+a1)x+a0
= „ =(„((anx+an-1)x+an-2)x+„+a1)x+a0. 这就是我国南宋时期数学家秦九韶在他的著作 《数书九章》中提出的算法.
思考4:对于f(x)=(„((anx+an-1)x+ an-2)x+„+a1)x+a0,
(1)(18,30)6; (2)(24,16) 8; (3)(63,63) (4)(72,8) 8; 63; 7; (5)(301,133 ) 想一想,如何求8251与6105的最大公约数?
思考2:对于8251与6105这两个数,它们的最大 公约数是多少?你是怎样得到的?
由于它们公有的质因数较大,利用上述方法求 最大公约数就比较困难.有没有其它的方法可以较简 单的找出它们的最大公约数呢?
思考2:另一种做法是先计算x2的值,然后依 次计算x2·x,(x2·x)·x,((x2·x)·x)·x的 值,这样每次都可以利用上一次计算的结果,这 时一共做了:
4次乘法运算,5次加法运算.
思考3:有没有更有效的算法呢?利用后一种算 法求多项式f(x)=anxn+an-1xn-1+„+a1x+a0的值,这 个多项式应写成哪种形式? f(x)=anxn+an-1xn-1+„+a1x+a0 =(anxn-1+an-1xn-2+„+a2x+a1)x+a0
1.3
算法案例
1.3
算法案例
1.3.1 辗转相除法和更相减损术 1.3.2 秦九韶算法 1.3.3 K进制化十进制
1.3.4 十进制化K进制
1.3.1 辗转相除法 和更相减损术
复习 1.研究一个实际问题的算法,主要从哪几方面展开?
算法步骤、程序框图和编写程序三方面展开.
2.在程序框图中算法的基本逻辑结构有哪几种? 顺序结构、条件结构、循环结构 3.在程序设计中基本的算法语句有哪几种? 输入语句、输出语句、赋值语句、条件语句、循环语句
思考5:你能把辗转相除法编成一个计算机程序吗? 第一步,给定两个正整数m,n(m>n). 第二步,计算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 PRINT m END 输入m,n 求m除以n的余数r m=n
由内向外逐层计算一次多项式的值,其算法步骤如何? 第一步,计算v1=anx+an-1. 第二步,计算v2=v1x+an-2. 第三步,计算v3=v2x+an-3. … 第n步,计算vn=vn-1x+a0. 上述方法称为秦九韶算法.
思考5:在秦九韶算法中,记v0=an,那么第k步的 算式是什么?
vk=vk-1x+an-k (k=1,2,„,n)
INPUT “n=”;n INPUT “an=”;a INPUT “x=”;x v=a i=n-1 WHILE i>=0 PRINT “i=”;i INPUT “ai=”;a v=v*x+a i=i-1 WEND PRINT v END
开始 输入n、an、x的值
v=an i=n-1 i=i-1 v=vx+ai 输入ai i≥0? 否 是 输出v 结束
PRINT END m
小结
1、辗转相除法.
2、更相减损术.
布置作业:
P45练习:1. P48习题1.3A组:1.
1.3.2
秦九韶算法
复习 1、什么是辗转相除法和更相减损术?
2、辗转相除法和更相减损术,是求两个正整 数的最大公约数的优秀算法,我们将算法转化为 程序后,就可以由计算机来执行运算,实现了古 代数学与现代信息技术的完美结合.
1.3.3 K进制化十进制
复习
1.简述辗转相除法和更相减损术的用途及内容.
2、秦九韶算法的用途及内容.
将这些算法转化为程序,就可以由计算机来完 成相关运算.
进位制的概念 进位制是为了计数和运算方便而约定的记数系 统. 约定满二进一,就是二进制;
例1 已知一个5次多项式为
f x 4x 5 2x 4 3.5x 3 2.6x 2 1.7 x 0.8
用秦九韶算法求f(5)的值. 解:f(x)=((((4x+2)x+3.5)x-2.6)x+1.7)x-0.8.
v1=4×5+2=22; v2=22×5+3.5=113.5; v3=113.5×5-2.6=564.9; v4=564.9×5+1.7=2826.2; v5=2826.2×5-0.8=14130.2. 所以f(5)= =14130.2.
开始 输入m,n m≠n? 是 k=m-n n>k? 是 m=n n=k 否
m=k
否
输出m 结束 讨论:该程 序框图对应的程 序如何表述?
开始
输入m,n m≠n? 是 k=m-n
n>k? 是 m=n n=k 否
m=k
否
输出m 结束
INPUT m,n WHILE m≠n k=m-n IF n>k THEN m=n n=k ELSE m=k END IF WEND
练习:用辗转相除法求下列两数的最大公约数: (1)(225,135) 45 (2)(98,196) 98 24 (3)(72,168) (4)(153,119) 17
二、更相减损术 《九章算术》是中国古代的数学专著,其中的 “更相减损术”也可以用来求两个数的最大公约数, 即“可半者半之,不可半者,副置分母、子之数, 以少减多,更相减损,求其等也.以等数约之.” 意思是: 第一步:任意给定两个正整数,判断它们是否 都是偶数. 若是,用2约简;若不是,执行第二步. 第二步:以较大的数减去较小的数,接着把差 与较小的数比较,并以大数减小数.继续这个操作, 直到所得的数相等为止,则这个等数或这个数与约 简的数的乘积就是所求的最大公约数.
练习:阅读下列程序,说明它解决的实际问题是什么?
INPUT “x=”;a n=0 y=0 WHLE n<5 y=y+(n+1)*a∧n n=n+1 WEND PRINT y END