NOIP循环结构的程序设计.ppt
NOIP循环结构的程序设计 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望在实际应用中,会经常遇到许多有规律性的重复运算,这就需要掌握本章所介绍的循环结构程序设计。在Pascal语言中,循环结构程序通常由三种的循环语句来实现。它们分别为FOR循环、当循环和直到循环。通常将一组重复执行的语句称为循环体,而控制重复执行或终止执行由重复终止条件决定。重复语句是由循环体及重复终止条件两部分组成。第一节第一节循环语句(循环语句(FOR语句)语句)for语句的一般格式语句的一般格式for:=todo;/递增型循环for:=downtodo;/递减型循环其中for、to、downto和do是Pascal保留字。表达式1与表达式2的值称为初值和终值。循环的语句格式:FOR变量名:=初值TO终值DO语句;求1+2+3+N的和。如何编程呢?【例】【例】S:=0;FORI:=1TO10DOS:=S+I;Writeln(S=,S);For语句执行过程语句执行过程先将初值赋给左边的变量(称为循环变量);判断循环变量的值是否“等于”终值,如已等于终值,则下次不再执行(本次是最后一次执行,循环变量的值也不更改),则跳到步骤;如果小于等于终值,则执行do后面的那个语句(称为循环体);循环变量递增(对to)或递减(对downto);返回步骤;循环结束,执行for循环下面的一个语句。说明循环变量必须是顺序类型。可以是整型、字符型、枚举型等,但不能为实型。循环变量的值递增或递减的规律是:选用to则为递增;选用downto则递减。循环体可以是一个基本语句,也可以是一个复合语句。循环变量的初值和终值一经确定,循环次数就确定了。但是在循环体内对循环变量的值进行修改,常常会使得循环提前结束或进入死环。所以禁止在循环体中随意修改控制变量的值。如:fori:=1to10dobegini:=2*i+1;/禁止类似的修改,FreePascal中会提示语法错误writeln(i);end;以上for循环是一个死循环,i永远等于2,不可能达到终止值10。for语句中的初值、终值都可以是顺序类型的常量、变量、表达式。应用举例应用举例例例4.1输出1100之间的所有偶数。程序如下:程序如下:Programex4_1;vari:integer;beginfori:=1to100doifimod2=0thenwrite(i:5);end.例例4.2编程计算编程计算1到到100的累加和:的累加和:s=1+2+3+100。【分析】设i为循环控制变量,累加和放在s中,利用循环变量i的值从1变化到100的规律,不需要另外引进从1变化到100的其它变量,程序的流程图如4-2所示。程序如下:程序如下:Programex4_2;vars,i:integer;begins:=0;fori:=1to100dos:=s+i;writeln(s);end.运行结果:5050只要对程序稍加修改就可以计算出以下算式的值:s=1+1/2+1/3+1/100s=12+22+32+1002s=2+4+6+100等等。例例4.3将顺序打印出将顺序打印出26个小写英文字母个小写英文字母:abczzcba。程序如下:程序如下:Programex4_3;vark:char;beginfork:=atozdowrite(k);fork:=zdowntoadowrite(k);writeln;end.例例4.4N的阶乘是指的阶乘是指1到到N的累乘,即的累乘,即N!=1*2*3*N,输入,输入一个数,求这个数的阶乘?一个数,求这个数的阶乘?程序如下程序如下:Programex4_4;varn,i:integer;/i为循环变量s:longint;/s存放阶乘的结果,类型为长整 型,防止结果太大beginreadln(n);s:=1;/这条语句少了,选手们思考一 下,会出现什么现象?fori:=2tondo/从2到n累乘到s中s:=s*i;writeln(s);/输出n!的值end.虽然s定义成longint,但输入12以上的数时,还是会出现错误的结果,说明结果超出了longint能够储存的范围,这时需要定义更大的类型,如int64,或干脆定义成实型变量用科学计数法来近似表示这个数,如real、extended。上例中用到了“递推”算法。所谓递推算法是指在一个数的序列值中,下一项的值在前一项的值的基础上推算出来的,即下一项对前一项有某种依赖关系。例如,为求5!,应先知道4!的值,然后再乘以5;为求6!必先求出5!。也就是说,从1!可以推出2!,从2!可以推出3!,从3!可以推出4!,以此类推。求n!的递推公式为:a1=1(n=1)an=n*an-1(n1)a1=1是“初始条件”或“边界条件”。只要找出递推关系,就可以由循环来处理,一项一项地推算出来以后各项。在程序中用同一个变量s来存储每一次推出来的值,由前一个s推出后一个s是递推。例例4.5已知一对兔子,每个月可以生一对小兔,而小兔经过一个月已知一对兔子,每个月可以生一对小兔,而小兔经过一个月生长后也可每月生一对小兔。即兔子的对数是:第一个月生长后也可每月生一对小兔。即兔子的对数是:第一个月1对,第对,第二个月二个月2对,第三个月对,第三个月3对,第四个月对,第四个月5对,对,假设兔子的生育期,假设兔子的生育期是是12个月,并且不死,问一年后,这对兔子有多少对活着的后代?个月,并且不死,问一年后,这对兔子有多少对活着的后代?【分析】【分析】根据题目给出的条件,得到算法:设当前月兔子有x对,它的前一个月有lastx对,前二个月有prevx对,明显存在一个递推关系,即x=lastx+prevx。Programex4_5;Vari,lastx,prevx,x:integer;beginprevx:=1;lastx:=2;fori:=3to12dobeginx:=lastx+prevx;prevx:=lastx;lastx:=x;end;writeln(x);end.运行结果:233例例4.6一个两位数一个两位数x,将它的个位数字与十位数字对调后得到一,将它的个位数字与十位数字对调后得到一个新数个新数y,此时,此时y恰好比恰好比x大大36,请编程求出所有这样的两位数。,请编程求出所有这样的两位数。【分析】【分析】用for循环列举出所有的两位数,x为循环变量;用公式a:=xdiv10分离出x的十位数字;用公式b:=xmod10分离出x的个位数字;用公式y:=b*10+a合成新数y;用式子y-x=36筛选出符合条件的数x并输出。Programex4_6;vara,b,x,y:integer;beginforx:=10to99dobegina:=xdiv10;b:=xmod10;y:=b*10+a;ify-x=36thenwriteln(x);end;readln;end.例例4.7把整数把整数3025从中剪开分为从中剪开分为30和和25两个数,此时再将这两数两个数,此时再将这两数之和平方,之和平方,(30+25)2=3025计算结果又等于原数。求所有符合这样计算结果又等于原数。求所有符合这样条件的四位数。条件的四位数。【分析】【分析】设符合条件的四位数为N,它应当是一个完全平方数,用(a*a)表示。为了确保N=(a*a)在四位数(10009999)范围内,可确定a在3299循环;计算N=a*a;将四位数N拆分为两个数n1和n2;若满足条件(n1+n2)*(n1+n2)N就输出N。Programex4_8;Varn,a,x,n1,n2:integer;beginfora:=32to99dobeginn:=a*a;n1:=ndiv100;/拆取四位数的前两位数n2:=n-n1*100;/拆取四位数的后两位数x:=n1+n2;ifx*x=Nthenwriteln(N);end;readlnend.例例4.9根据公式根据公式2/6=1+1/22+1/32+1/n2,计算圆周率的,计算圆周率的pai值。值。【分析】【分析】此题是上例的一个变例,关键在于求出右边的累加和,变量n由键盘输入,n越大,圆周率的pai值就越精确。但是,i作为循环控制变量参加循环体的运算,它是整型数,那么当i=182时,i*i已经超过了正整数32767的范围,在Pascal系统里就把它变为-65536+i*i的整型数进行处理,当i=256时,-65536+i*i正好等于零,从面产生以零作除数的编译错误,所以我们在程序里应该把i定义为长整型,这样可以输入更大的n(不能大于46341,等于65536时,也会同样出现被0除的溢出错误)。Programex4_9;vari,n:integer;/应该为longint(长整型)pai,s:real;beginreadln(n);s:=0;fori:=1tondos:=s+1/(i*i)pai:=sqrt(6*s);writeln(pai:8:6);end.运行结果:输入:1000输出:3.132077输入:10000输出:3.141497【上机练习【上机练习4.1】1、求12+22+32+10022、求s=1+1/2+1/3+1/1003、计算100之内所有的奇数之和。4、计算n!,其中n由键盘输入。5、求10个数中的最大值和最小值。6、按字母表的顺序,从字母A到Z顺序打印输出。7、求菲波拉契数列a0,a1,a2,a20。a0=0,a1=1,a2=a1+a0,a3=a2+a1,an=an-1+an-2;如0,1,1,2,3,5,8,13,21,第二节第二节当语句(当语句(WHILE语句)语句)WHILE循环循环对于for循环有时也称为计数循环,当循环次数未知,只能根据某一条件来决定是否进行循环时,用while语句或repeat语句实现循环要更方便。while语句的形式为:whiledo;其意义为:当布尔表达式的值为true时,执行do后面的语句。while语句的执行过程为:判断布尔表达式的值,如果其值为真,执行步骤2,否则执行步骤4;执行循环体语句(do后面的语句);返回步骤1;结束循环,执行while的下一个语句。说明:这里while和do为保留字。当布尔表达式成立时,执行do后面的语句(循环体),当布尔表达式的值为false时,才结束循环,转去执行while语句的下一条语句,故又称此语句为“当”语句或“当型循环”。while语句的特点是:先判断,后执行语句的特点是:先判断,后执行。例例4.10求恰好使求恰好使s=1+1/2+1/3+1/n的值大于的值大于10时时n的值。的值。【分析】【分析】恰好使s的值大于10意思是当表达式s的前n-1项的和小于或等于10,而加上了第n项后s的值大于10。从数学角度,我们很难计算这个n的值。故从第一项开始,当s的值小于或等于10时,就继续将下一项值累加起来。当s的值超过10时,最后一项的项数即为要求的n。程序如下程序如下:Programex4_10;Vars:real;n:integer;/n表示项数begins:=0.0;n:=0;whiles=10do/当s的值还未超过10时beginn:=n+1;/项数加1s:=s+1/n;/将下一项值累加到send;writlen(n=,n);/输出结果end.例例4.11求两个正整数求两个正整数m和和n的最大公约数。的最大公约数。【分析】【分析】求两个正整数的最大公约数采用的辗转相除法求解。以下是辗转的算法:分别用m,n,r表示被除数、除数、余数。求m/n的余数r.若r=0,则n为最大公约数.若r0,执行第步.将n的值放在m中,将r的值放在n中.返回重新执行第步。程序如下程序如下:programex4_11;Varm,n,a,b,r:integer;beginwrite(Inputm,n:);readln(m,n);a:=m;b:=n;r:=amodb;whiler0dobegina:=b;b:=r;r:=amodb;end;writeln(Thegreatestcommondivideis:,b:8);end.例例4.12利用格里高公式求利用格里高公式求。/4=1-1/3+1/5-1/7+,直到最后一项的值小于,直到最后一项的值小于10-6为止。为止。【分析】【分析】解本题的关键就是求右边数值序列的和,序列有明显的特点:分母是从1开始的奇数,加、减号轮流出现,因此,我们可以用n=n+2表示序列数值的变化,用f=-f来设置它们知项的符号位。程序如下程序如下:Programex4_12;Varn,f:integer;t,pai:real;beginpai:=0;t:=1;n:=1;f:=1;whileabs(t)=1e-6dobeginpai:=pai+t;n:=n+2;f:=-f;t:=f/n;end;pai:=pai*4;writeln(pai:10:8);end.运行程序会发现没有结果,为什么?因为布尔表达式abs(t)=1e-6,即1/n=1e-6,而程序的说明部分n是整型数,它的范围是-3276832767,条件永远成立,所以形成死循环,从而没有运行结果。while循环不需要用顺序型数据来控制循环的次数,改程序的说明部分中的n为实型数或说明为长整型即可,请同学们自己修正请同学们自己修正,以后要对变量的取值范围引起重视。【上机练习【上机练习4.2】1、用WHILE循环完成如下3题:求s=1+2+3+4+10求s=1+1/2+1/3+1/100计算n!,其中n由键盘输入。2、输入任一的自然数A,B,求A,B的最小公倍数。3、小球从100高处自由落下,着地后又弹回高度的一半再落下。求第20次着地时,小球共通过多少路程?4、Faibonacci数列前几项为:0,1,1,2,3,5,8,其规律是从第三项起,每项均等于前两项之和。求前30项,并以每行5个数的格式输出。5、鸡兔同笼,头30,脚90,求鸡兔各几只?第三节第三节直到循环(直到循环(REPEAT语句)语句)用while语句可以实现“当型循环”,用repeat-until语句可以实现“直到型循环”。repeat-until语句的含义是:“重复执行循环,直到指定的条件为真时为止”。直到循环语句的一般形式:Repeat;:;until;其中Repeat、until是Pascal保留字,repeat与until之间的所有语句称为循环体。说明:说明:repeat语句的特点是:先执行循环,后判断结束条件,因而至少要执行一次循环体。repeat-until是一个整体,它是一个(构造型)语句,不要误认为repeat是一个语句,until是另一个语句。repeat语句在布尔表达式的值为真时不再执行循环体,且循环体可以是若干个语句,不需用begin和end把它们包起来,repeat和until已经起了begin和end的作用。while循环和repeat循环是可以相互转化的。例例4.13求两个正整数求两个正整数m和和n的最大公约数。程序的最大公约数。程序采用采用repeat-until循环实现。循环实现。Programex4_13;varm,n,r:integer;beginreadln(m,n);repeat/辗转相除法r:=mmodn;m:=n;n:=r;untilr=0;writeln(m);end.例例4.14校体操队到操场集合校体操队到操场集合,排成每行排成每行2人人,最后多出最后多出1人人;排成每行排成每行3人人,也多出也多出1人人;分别按每行排分别按每行排4,5,6人人,都多出都多出1人人;当排成每行当排成每行7人时人时,正好不多。求校体操队正好不多。求校体操队至少是多少人至少是多少人?【分析】【分析】设校体操队为X人,根据题意X应是7的倍数,因此X的初值为7,以后用inc(x,7)改变X值;为了控制循环,用逻辑变量yes为真(True)使循环结束;如果诸条件中有一个不满足,yes的值就会为假(false),就继续循环。Programex4_14;varx:integer;yes:boolean;beginx:=0;repeatyes:=true;inc(x,7);ifxmod21thenyes:=false;ifxmod31thenyes:=false;ifxmod41thenyes:=false;ifxmod51thenyes:=false;ifxmod61thenyes:=false;untilyes;/直到yes的值为真writeln(All=,x);readlnend.程序中对每个X值,都先给Yes赋真值,只有在循环体各句对X进行判断时,都得到“通过”(此处不赋假值)才能保持真值。例例4.15求求1992个个1992的乘积的末两位数是多少?的乘积的末两位数是多少?【分析】【分析】积的个位与十位数只与被乘数与乘数的个位与十位数字有关,所以本题相当于求1992个92相乘,而且本次的乘积主下一次相乘的被乘数,因此也只需取末两位参与运算就可以了。Programex4_15;vara,t:integer;Begina:=1;t:=0;repeatt:=t+1;a:=(a*92)mod100;untilt=1992;writeln(a);Readln;End.例例4.16利用格里高公式求利用格里高公式求。/4=1-1/3+1/5-1/7+,直到最,直到最后一项的值小于后一项的值小于10-6为止为止.【分析】【分析】解本题的关键就是求右边数值序列的和,序列有明显的特点:分母是从1开始的奇数,加、减号轮流出现,因此,我们可以用m=n+2表示序列数值的变化,用f=-f来设置它们知项的符号位。Programex4_16;varf:integer;n,t,pai:real;beginpai:=0;t:=1;n:=1;f:=1;repeatpai:=pai+t;n:=n+2;f:=-f;t:=f/n;untilabs(t)1e-6;pai:=pai*4;writeln(pai:10:8);end.运行结果:3.14159066以上我们已介绍了三种循环语句。一般说来,用for循环比较简明,只要能用for循环,就尽量作用for循环。只在无法使用for循环时才用while循环和repeat-until循环,而且while循环和repeat-until循环是可以互相转化的,具体用哪个,还要看个人喜好,但他们也存在细微区别,那就是while语句的循环体有可能一次都不会被执行,而repeat语句中循环体至少执行一次。for循环在大多数场合也能用while和repeat-until循环来代替。一般for循环用于有确定次数循环,而while和repeat-until循环用于未确定循环次数的循环。【上机练习【上机练习4.3】1、用REPEAT循环完成如下3题:求s=1+2+3+4+10求s=1+1/2+1/3+1/100计算n!,其中n由键盘输入。2、读一组实数,遇零终止,打印其中正、负数的个数及各自的总和。3、用辗转相除法求两个自然数的最大公约数。4、找出被2、3、5除时余数为1的最小的十个数。5、将一根长为369cm的钢管截成长为69cm和39cm两种规格的短料。在这两种规格的短料至少各截一根的前提下,如何截才能余料最少。第四节第四节多重循环结构多重循环结构当一个循环的循环体中又包含循环结构程序时,我们就称之为循环嵌套。内循环整个作为外循环的一条语句。例例4.17求求1!+2!+10!的值。的值。【分析】【分析】这个问题是求10自然数的阶乘之和,可以用for循环来实现。程序结构如下:forn:=1to10dobeginN!的值t累加N!的值send显然,通过10次的循环可求出1!,2!,10!,并同时累加起来,可求得S的值。而求T=N!,又可以用一个for循环来实现:因此,整个程序为:programex4_17;vart,s:longint;i,j,n:integer;beginS:=0;forn:=1to10dobegint=1;forj:=1tondo/求n!t:=t*j;S:=S+t;/累加n!end;writeln(s=,s:0:0);end.以上的程序是一个二重的for循环嵌套。这是比较好想的方法,但实际上对于求n!,我们可以根据求出的(n-1)!乘上n即可得到,而无需重新从1再累乘到n。程序可改为:程序可改为:programex4_17;vart,s:longint;i,j,n:integer;begins:=0;t:=1;forn:=1to10dobegint:=t*n;/t为上一个数的n-1的阶乘值,再乘以n即为n!s:=s+t;/累加n!end;writeln(s=,s:0:0);end.显然第二个程序的效率要比第一个高得多。第一程序要进行1+2+10=55次循环,而第二程序进行10次循环。如题目中求的是1!2!1000!,则两个程序的效率区别更明显。例例4.18一个炊事员上街采购一个炊事员上街采购,用用500元钱买了元钱买了90只鸡只鸡,其中母其中母鸡一只鸡一只15元元,公鸡一只公鸡一只10元元,小鸡一只小鸡一只5元元,正好把钱买完。问母正好把钱买完。问母鸡、公鸡、小鸡各买多少只?鸡、公鸡、小鸡各买多少只?【分析】【分析】设母鸡I只,公鸡J只,则小鸡为90-I-J只,则15*I+10*J+(90-I-J)*5=500,显然一个方程求两个未知数是不能直接求解。必须组合出所有可能的i,j值,看是否满足条件。这里I的值可以是0到33,J的值可以0到50。源程序如下:programrex4_18;vari,j,k:integer;beginfori:=0to33do/枚举母鸡的数量forj:=0to50do/枚举公鸡的数量begink:=90-i-j;if15*i+10*j+5*k=500thenwriteln(i:5,j:5,k:5);end;end.例例4.19求求100999中的水仙花数。(若三位数中的水仙花数。(若三位数ABC,ABC=A3+B3+C3,则称,则称ABC为水仙花数。例如为水仙花数。例如153,13+53+33=1+125+27=153,则,则153是水仙花数。)是水仙花数。)【分析】【分析】根据题意,采用三重循环来求解。由于循环次数一定,用for循环最为简单。程序如下:程序如下:Programex4_19_1;vara,b,c:integer;beginfora:=1to9doforb:=0to9doforc:=0to9doifa*a*a+b*b*b+c*c*c=a*100+b*10+cthenwrite(a*100+b*10+c:6);end.运行结果:153370371407同时也可以采用一个for循环来求解,表面上看好像优于三重循环,实际上却比上面的程序效率低,请同学们自己分析。程序如下:程序如下:Programex4_19_2;varm,a,b,c:integer;beginform:=100to999dobegina:=mdiv100;/m的百位b:=(mmod100)div10;/m的十位c:=mmod10;/m的个位ifa*a*a+b*b*b+c*c*c=mthenwriteln(m:6);end;end;例例4.20求求100200之间的所有素数。之间的所有素数。【分析】【分析】我们可对100200之间的每一整数进行判断,判断它是否为素数,是则输出。而对于任意整数i,根据素数定义,我们从2开始,到,找i的第一个约数。若找到第一个约数,则i必然不是素数,否则i为素数。用for和while语句结合来编写。程序如下:程序如下:programrex4_20;vari,x:integer;beginfori:=100to200dobeginx:=2;while(x=trunc(sqrt(i)and(imodx0)do/枚举2到之间的每个数beginx:=x+1;/在枚举的范围内并且没有出现约数则继续枚举end;ifxtrunc(sqrt(i)thenwrite(i:8);end;end.例例4.21试编写能够打印输出如下图形的程序:试编写能够打印输出如下图形的程序:#程序如下:程序如下:Programex4_21;vari,j,k:integer;beginfori:=8downto1do/总共要输出8行内容beginforj:=1to8-idowrite();/控制每行空格数目,这个循环可以写成:write(:8-i);fork:=2*i-1downto1dowrite(#);/控制每行中的个数writeln;end;end.此程序的设计是由两个并列循环加一个嵌套循环构成的。各环的作用如下:(1)外层环控制打印的行数,此倒三角形共8行,故外环的设置为递减型循环。(2)嵌套在外环中的第一个并列循环为空格输出,根据图形变化控制输出不同数量的空格。(3)外环内第二个并列循环为控制三角形每行中#号的个数。例例4.22验证哥德巴赫猜想:任一个充分大的偶数验证哥德巴赫猜想:任一个充分大的偶数N(N=4),可以用两个素数之和表示。例如:),可以用两个素数之和表示。例如:4=2+26=3+38=3+598=17+79输入一个数,不是偶数则输出:输入一个数,不是偶数则输出:“isnoteven.”,否则输出表示它的二个素数。否则输出表示它的二个素数。【分析】【分析】哥德巴赫猜想是一个古老而著名的数学难题,它的理论证明很麻烦,迄今未得出最后证明。在这方面我国数学家陈景润的研究成果处于世界领先地位。这里只对有限范围内的数用计算机加以验证,不算严格的证明。充分大的偶数用N表示,将它分成P和Q,使NP+Q。P从1开始(每次加1),QN-P。若P、Q均为素数,则输出结果,否则以P+1再试。Programex4_22;varn,p,q,j:integer;flagp,flagq:boolean;beginreadln(n);ifnmod2=0then/输入的是偶数beginp:=1;/p从1开始枚举repeatp:=p+1;q:=n-p;/n=p+qflagp:=true;/查看当前的p是不是素数forj:=2totrunc(sqrt(p)doif(pmodj)=0thenflagp=false;flagq:=true;/查看当前的q是不是素数forj:=2totrunc(sqrt(q)doifqmodj=0thenflagq:=false;untilflagpandflagq;/直到所枚举的p、q是素数为止writeln(p,q);endelsewriteln(isnoteven.);/输入不是偶数的情况end.【上机练习【上机练习4.4】1、求s=11+22+33+.+NN2、求s=1+1/2!+1/3!+1/10!3、输入一个整数,若是素数,输出“YES”,否则输出“NO”4、任给一个自然数n,求出这个自然数不同因数的个数。如:n=6时,因为1,2,3,6这四个数均是6的因数,故输出为total=4。5、输入一列图形(字母金字塔)aababc.abcyz6、把一张一元钞票换成一分,二分和五分的硬币,每种至少一枚。问有哪几种换法?7、百鸡问题:一只公鸡值5元,一只母鸡值3元,而1元可买3只小鸡。现有100元钱,想买100只鸡。问可买公鸡、母鸡、小鸡各几只?8、某人想将手中的一张面值100元的人民币换成10元、5元、2元和1元面值的票子。要求换正好40张,且每种票子至少一张。问:有几种换法?应适当考虑减少重复次数。9、有一堆100多个的零件,若三个三个数,剩二个;若五个五个数,剩三个;若七个七个数,剩五个。请你编一个程序计算出这堆零件至少是多少个?10、编写一程序,验证角谷猜想。所谓的角谷猜想是:“对于任意大于1的自然数n,若n为奇数,则将n变为3*n+1,否则将n变为n的一半。经过若干次这样的变换,一定会使n变为1。”11、输入二个正整数,求出它们的最大公约数和最小公倍数。12、求1-100之间的所有素数(素数是大于1,且除1和它本身外,不能被任何其它整数所整除的整数)。13、哥德巴赫猜想(任何充分大的偶数都可由两个素数之和表示)。将4-100中的所有偶数分别用两个素数之和表示。输出为:4=2+26=3+3.100=3+97