第一章 算法初步
1.3 算法案例
1.求两个正整数的最大公约数的算法
(1)辗转相除法
①定义:辗转相除法是用于求_____________的最大公约数的一种算法,这种算法是由欧几里得在公元前300年左右首先提出的,因而又叫欧几里得算法.就是对于给定的两个正整数,用较大的数除以较小的数,若余数不为零,则将余数和较小的数构成一对新数,继续上面的除法,直到余数为零,则这时较小的数就是原来两个数的最大公约数.
②算法步骤
用辗转相除法求两个正整数的最大公约数,其算法步骤如下:
第一步,给定两个正整数.
第二步,计算除以所得的余数.
第三步,.
第四步,若,则的最大公约数等于;否则,返回第二步.
③程序框图如图所示:
④程序如下:
INPUT m,n
DO
r=m MOD n
m=n
n=r
?LOOP UNTIL r=0
PRINT m
END
或
INPUT m,n
r=1
While r>0
r=m MOD n
m=n
n=r
? WEND
PRINT m
END
(2)更相减损术
①定义:中国古代的数学专著《九章算术》中记载着“更相减损术”,即“可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也.以等数约之.”
②算法步骤
第一步,任意给定两个正整数,判断它们是否都是偶数.若是,用2约简;若不是,执行第二步.
第二步,以较大的数减去较小的数,接着把所得的差与较小的数比较,并以大数减小数.继续这个操作,直到所得的数相等为止,则这个数(等数)或这个数与约简的数的乘积就是所求的最大公约数.
③程序框图
④程序如下:
INPUT “a,b=”;a,b
WHILE a≠b
r=a-b
IF b>r THEN
a=b
b=r
ELSE
a=r
END IF
WEND
PRINT b
END
2.秦九韶算法
(1)定义及原理:把一个n次多项式改写成如下形式:.求多项式的值时,首先计算最内层括号内一次多项式的值,即,然后由内向外逐层计算一次多项式的值,即,…,,这种求n次多项式的值的方法叫做秦九韶算法.
(2)秦九韶算法程序化的可行性探讨:观察秦九韶算法中的n个一次式,可见计算时要用到的值,若令,我们可以得到下面的递推公式:.这是一个在秦九韶算法中反复执行的步骤,可以用循环结构来实现.
(3)算法步骤
第一步,输入多项式次数n、最高次项的系数和x的值.
第二步,将v的值初始化为,将i的值初始化为n-1.
第三步,输入i次项的系数.
第四步,.
第五步,判断i是否大于或等于0.若是,则返回第三步;否则,输出多项式的值v.
(4)程序框图如图所示:
(5)程序如下:
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
3.进位制
(1)定义:进位制是人们为了计数和运算方便而约定的记数系统,约定满二进一,就是二进制;满十进一,就是十进制;满六十进一,就是六十进制;等等.也就是说,“满几进一”就是几进制,几进制的基数就是几.
一般地,若k是一个大于1的整数,那么以k为基数的k进制数可以表示为一串数字连写在一起的形式:.
说明:①若一个数为十进制数,其基数可以省略不写.
②若是其他进位制的数,在没有特别说明的前提下,其基数必须写出,常在数的右下角标明基数.
(2)将进制数转化为十进制数
①算法步骤:
计算进制数的右数第位数字与的乘积,再将其累加,这是一个重复操作的步骤.所以,可以用循环结构来构造算法,算法步骤如下:
第一步,输入和的值.
第二步,将的值初始化为0,的值初始化为1.
第三步,.
第四步,判断是否成立.若是,则执行第五步;否则,返回第三步.
第五步,输出的值.
②程序框图如图所示:
③程序如下:
INPUT “a,k,n=”;a,k,n
b=0
i=1
t=a MOD 10
DO
b=b+t*k^(i-1)
a=a10
t=a MOD 10
i=i+1
LOOP UNTIL i>n
PRINT b
END
(3)将十进制数转化为进制数
①转化方法:
十进制数化为进制数用____________,即先把十进制数a除以,商为,余数为,再把除以,商为,余数为,…,反复进行这种除法,直到商除以所得的商为0,余数是,即为止,此时将所有余数按从右到左排列就得到所要求的进制数.
②算法步骤:
第一步,给定十进制正整数a和转化后的数的基数.
第二步,求出a除以所得的商,余数.
第三步,把得到的余数依次从右到左排列.
第四步,若,则,返回第二步;否则,输出全部余数排列得到的进制数.
③程序框图如图所示:
④程序如下:
INPUT “a,k=”;a,k
b=0
i=0
DO
q=ak
r=a MOD k
b=b+r*10^i
i=i+1
a=q
LOOP UNTIL q=0
PRINT b
END
K知识参考答案:
1.(1)两个正整数 2.(2) 3.(3)①除取余法
K—重点
辗转相除法、更相减损术、秦九韶算法、进位制
K—难点
用秦九韶算法求多项式的值,进位制间的转换
K—易错
易对秦九韶算法中的运算次数理解错误
1.辗转相除法与更相减损术
辗转相除法与更相减损术有着相同的算法依据,但要注意运算过程的差别.
两者的区别是:
(1)辗转相除法进行的是除法运算,即辗转相除,更相减损术进行的是减法运算,即辗转相减,但其实质都是一个不断的递推过程.
(2)辗转相除法,下一次进行相除时,由上一次的除数和余数直接相除即可.而更相减损术下一次相减前必须有一个判断大小的过程,以区别谁做被减数.
注意:用更相减损术求两正整数的最大公约数时,若两数为偶数,可先约去2,这时莫忘记求得的相等两数乘以约简的数才是所求的最大公约数.
【例1】用辗转相除法和更相减损术求840与1764的最大公约数.
【答案】840与1764的最大公约数是84.
【解析】辗转相除法:
1764=840×2+84,
840=84×10+0,
∴840与1764的最大公约数是84.
更相减损术:
1764–840=924,
924–840=84,
840–84=756,
756–84=672,
672–84=588,
588–84=504,
504–84=420,
420–84=336,
336–84=252,
252–84=168,
168–84=84,
∴840与1764的最大公约数是84.
【例2】利用辗转相除法求3869与6497的最大公约数.
【名师点睛】辗转相除法计算次数少,而更相减损术计算次数多,但是更相减损术每一步的计算都是减法,比做除法运算要简单一些,所以一般当数较小时考虑用更相减损术,当数较大时考虑用辗转相除法.
2.秦九韶算法
秦九韶算法的实质是:求多项式的值时,转化为求n个一次多项式的值,共进行n次乘法运算和n次加法运算.这种算法的运算次数较少,是多项式求值比较先进的算法.
【例3】 用秦九韶算法计算多项式f(x)=12+35x–8x2+79x3+6x4+5x5+3x6在x=–4时的值时,V3的值为
A.–845 B.220
C.–57 D.34
【答案】C
【解析】∵多项式f(x)=12+35x–8x2+79x3+6x4+5x5+3x6=(((((3x+5)x+6)x+79)x–8)x+35)x+12,
当x=–4时,∴v0=3,v1=3×(–4)+5=–7,v2=–7×(–4)+6=34,v3=34×(–4)+79=–57.故选C.
【例4】用秦九韶算法计算函数f(x)=2x4+3x3+5x–4在x=2时的函数值.
【名师点睛】利用秦九韶算法计算多项式的值的策略:
(1)正确地将多项式改写,若在多项式中有几项不存在,可将这些项的系数看成0,即把这些项看做.
(2)由内向外逐次计算.
(3)每一步计算结果准确,由于下一次计算用到上一次计算的结果,应认真、细致地计算每一步.
3.进位制
把一个非十进制数转化为另一种非十进制数,通常是把这个数先转化为十进制数,然后再利用除k取余法,把十进制数转化为k进制数.
【例5】 将八进制数127(8)化为十进制数.
【答案】87
【解析】.
【例6】已知一个k进制的数123(k)与十进制的数38相等,求k的值.
【答案】5
【解析】将转化为十进制,,
由题意,得k2+2k+3=38,
所以k2+2k–35=0,
所以k=5或k=–7(舍)
所以k=5.
【名师点睛】除k取余法的两个关注点:①要连续除:用k连续去除十进制数或所得的商,直到商为零为止.
②若是其他进位制的数,在没有特别说明的前提下,其基数必须写出,常在数的右下角标明基数.
1.秦九韶是我国古代数学家的杰出代表之一,他的 《数学九章》 概括了宋元时期中国传统数学的主要成就.由他提出的一种多项式简化算法称为秦九韶算法:它是一种将n次多项式的求值问题转化为n个一次式的算法.即使在现代,利用计算机解决多项式的求值问题时,秦九韶算法依然是最优的算法.用秦九韶算法求多项式f(x)=4x5–x2+2,当x=3时的值时,需要进行的乘法运算和加法运算的次数分别为
A.4,2 B.5,2 C.5,3 D.6,2
2.用秦九韶算法计算多项式f(x)=2x6+5x5+6x4+23x3–8x2+10x–3,当x=2时,V3的值为
A.9 B.24 C.71 D.134
3.二进制数101101(2)对应的十进制数是
A.45 B.44 C.46 D.47
4.k进制数3651(k),则k可能是
A.2 B.4 C.6 D.8
5.将十进制数17转化为二进制数为
A.11110 B.10101 C.10011 D.10001
6.二进制数110011(2)化为十进制数为
A.51 B.52 C.25223 D.25004
7.用秦九韶算法计算多项式f(x)=2x4–x3+3x2+7,在求x=3时对应的值时,v3的值为__________.
8.用辗转相除法求1813和333的最大公约数时,需要做__________次除法.
9.10101(2)转化为十进制数是__________.
10.用秦九韶算法求多项式f(x)=7x3+3x2–5x+11在x=23时的值,在运算过程中下列数值不会出现的是
A.164 B.3767 C.86652 D.85169
11.下列四个数中数值最大的是
A.1111(2) B.16 C.23(7) D.30(6)
12.进位制是人们为了计数和运算方便而约定的计数系统,“满几进一”就是几进制,不同进制之间可以相互转化,例如把十进制的89转化为二进制,根据二进制数“满二进一”的原则,可以用2连续去除89得商,然后取余数,具体计算方法如下:
把以上各步所得余数从下到上排列,得到89=1011001(2)这种算法叫做“除二取余法”,上述方法也可以推广为把十进制数化为k进制数的方法,称为“除k取余法”,那么用“除k取余法”把89化为七进制数为__________.
13.将4034与10085的最大公约数化成五进制数.
14.用秦九韶算法求多项式:f(x)=12+35x–8x2+79x3+6x4+5x5+3x6在x=–4的值.
15.(1)用辗转相除法求5280和12155的最大公约数,并用更相减损术检验.
(2)先将412(5)化成十进制的数,然后用“除k取余法”再化成七进制的数.
16.试求出84,108,132和156这四个数的最大公约数.
17.用秦九韶算法计算当时的值,并判断多项式在区间上有没有零点.
18.(2016四川文科)秦九韶是我国南宋时期的数学家,普州(现四川省安岳县)人,他在所著的《数书九章》中提出的多项式求值的秦九韶算法,至今仍是比较先进的算法.如图所示的程序框图给出了利用秦九韶算法求某多项式值的一个实例,若输入n,x的值分别为3,2,则输出v的值为
A.35 B.20 C.18 D.9
19.(2016全国甲卷文科、理科)中国古代有计算多项式值的秦九韶算法,如图是实现该算法的程序框图.执行该程序框图,若输入的x=2,n=2,依次输入的a为2,2,5,则输出的s=
A.7 B.12 C.17 D.34
1
2
3
4
5
6
10
11
18
19
B
C
A
D
D
A
D
D
C
C
1.【答案】B
【解析】∵f(x)=((((4x)x)x–1)x)x+2,∴乘法要运算5次,加法要运算2次.故选B.
4.【答案】D
【解析】因为k进制数3651(k)中出现的最大数字为6,可得:k>6,故选D.
5.【答案】D
【解析】17÷2=8…1,
8÷2=4…0,
4÷2=2…0,
2÷2=1…0,
1÷2=0…1,
故17(10)=10001(2).故选D.
6.【答案】A
【解析】110011(2)=1×20+1×2+1×24+1×25=1+2+16+32=51.故选A.
7.【答案】54
【解析】f(x)=2x4–x3+3x2+7=(((2x–1)x+3)x)x+7,∴v0=2,v1=2×3–1=5,v2=5×3+3=18,v3=18×3=54.故答案为:54.
8.【答案】3
【解析】∵1813=333×5+148,333=148×2+37,148=37×4,故1813和333的最大公约数为37,在求解过程中共进行了3次除法运算,故答案为:3.
9.【答案】21
【解析】10101(2)=1×20+0×21+1×22+0×23+1×24=21,故答案为:21.
10.【答案】D
【解析】f(x)=7x3+3x2–5x+11=x(x(7x+3)–5)+11,
则v0=7,v1=7×23+3=164,v2=164×23–5=3767,v3=3767×23+11=86652,
故在运算过程中下列数值不会出现的是D.故选D.
13.【答案】31032(5)
【解析】先求4034与10085的最大公约数,
10085=4034×2+2017,4034=2017×2
∴4034与10085的最大公约数就是2017.
又∵2017÷5=403…2
403÷5=80…3,
80÷5=16…0,
16÷5=3…1,
3÷5=0…3,
∴将十进制数2017化为五进制数是31032(5).故答案为:31032(5).
14.【答案】3392
【解析】∵f(x)=12+35x–8x2+79x3+6x4+5x5+3x6
=(((((3x+5)x+6)x+79)x–8)x+35)x+12,
∴v0=a6=3,
v1=v0x+a5=3×(–4)+5=–7,
v2=v1x+a4=–7×(–4)+6=34,
v3=v2x+a3=34×(–4)+79=–57,
v4=v3x+a2=–57×(–4)+(–8)=220,
v5=v4x+a1=220×(–4)+35=–845,
v6=v5x+a0=–845×(–4)+12=3392.
∴当x=–4时,f(x)的值为3392.
15.【答案】55
【解析】(1)用辗转相除法求5280和12155的最大公约数,
12155=2×5280+1595
5280=3×1595+495
1595=3×495+110
495=4×110+55
110=2×55
∴5280和12155的最大公约数为55.
用更相减损术进行检验:
12155–5280=6875,
6875–5280=1595,
5280–1595=3685,
3685–1595=2090,
2090–1595=495,
1595–495=1100,
1100–495=605,
605–495=110,
495–110=385,
385–110=275,
275–110=165,
165–110=55,
110–55=55.
经检验:5280和12155的最大公约数为55.
(2)412(5)=2×50+1×51+4×52=2+5+4×25=107,
∵107=7×15+2,
15=7×2+1,
2=7×0+2.
∴把5进制的数412(5)化为7进制是212(7).
17.【答案】当时,.在区间上有零点.
【解析】因为,
,
所以,
,
,
,
,
,
,
,
所以.
又当时,,
结合,所以,
所以多项式在区间上有零点.
18.【答案】C
【解析】本题考查算法案例与程序框图,意在考查考生的运算求解能力与应用能力.根据程序框图有:n=3,x=2,v=1,i=2≥0,所以v=1×2+2=4,i=1≥0,所以v=4×2+1=9,i=0≥0,所以v=9×2+0=18,i=–1<0,不满足条件,跳出循环,输出v=18.故选C.