在做第四章(循环结构程序设计)的作业时,有一道“求1-100之间的所有素数”的题目,有意思的是最后出现了三种不同的写法,这三种写法的基本思想都差不多但其核心算法不同,做过求素数算法的人都知道,所谓素数就是除了1和它本身外没有其他数可以整除它的数,固然其核心算法就是检验这个数是否可以被其他数整除。毋庸置疑这个核心算法应当由循环结构来完成。明确了这些之后我们回来再说说这三种写法:
第一种写法是我最初尝试写这个题目时设计的算法(由于其核心算法采用REPEAT UNTIL型循环,故我们以下简称为REPEAT循环),它的代码是这样的:
REPEAT.PAS
PROGRAM prime(input,output);
{求100以内质数}
VAR
{flagnum用来标示当前数是否为质数}
i,num:integer;
flagnum:boolean;
BEGIN
{输出2为质数,下面将不再考虑2}
writeln( ' 2 is a prime number ... ' );
{下面开始判断3到100中的数那些是质数}
FOR num: = 3 TO 100 DO
BEGIN
{置初值}
flagnum: = true ;
i: = 2 ;
REPEAT
{用当前数num去除i,如果可以被整除则标记其为非质数}
IF num MOD i = 0
THEN flagnum: =
{求100以内质数}
VAR
{flagnum用来标示当前数是否为质数}
i,num:integer;
flagnum:boolean;
BEGIN
{输出2为质数,下面将不再考虑2}
writeln( ' 2 is a prime number ... ' );
{下面开始判断3到100中的数那些是质数}
FOR num: = 3 TO 100 DO
BEGIN
{置初值}
flagnum: = true ;
i: = 2 ;
REPEAT
{用当前数num去除i,如果可以被整除则标记其为非质数}
IF num MOD i = 0
THEN flagnum: =