[pascal]对“求1-100之间的所有素数”的三种不同循环结构算法的分析

本文分析了使用REPEAT UNTIL、WHILE和FOR三种循环结构在Pascal中求解1-100之间素数的算法。FOR循环算法遵循常规,利用2到数的平方根进行判断,提高效率。REPEAT循环虽然可人为控制循环次数,但会误判2为非素数。WHILE循环在保持效率的同时避免了REPEAT的副作用,且代码更简洁。根据代码可读性和执行效率,WHILE循环算法最优,其次是REPEAT,再次是FOR。

  在做第四章(循环结构程序设计)的作业时,有一道“求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:
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值