回 帖 发 新 帖 刷新版面

主题:请教一个素数的问题,谢谢!!!

题目: 找出100--200间的全部素数.
   书上的程序是:
   FOR n=101 TO 200 STEP 2
    k=INT(SQR(n))
    i=2
    flag=0
   WHILE i<=k AND flag=0
    IF n MOD i=0 THEN  flag =1 ELSE i=i+1
   WEND
   IF  flag=0 THEN  PRINT n,
   NEXT n
   END
  无疑,书上的程序是对的.可我有个问题,就是当我把WHIEL句改成WHILE i<=k.
不要AND flag=0其它的都不变,程序就不能正常运行了。
  我原来以为加AND flag=0的目的是为了提高程序运行效率,加不加都一样,但现
在看来好像这半句话必不可少。谁能告诉我为什么呀?还有是不是FLAG只能设为1或0
,设为别的数行么?
  这个是我自已编的:
   FOR i=100 TO 200
    k=INT(SQR(i))
    flag=0
    FOR n=2 TO k
     IF i mod n THEN  flag=1
    NEXT n
  IF flag=0 THEN PRINT i,
  NEXT i
  END

请指正,谢谢。

回复列表 (共3个回复)

沙发

你若去掉了FLAG=0,那么一但if条件i mod n=0成立时只能执行flag=1这条语句,
而不执行i=i+1语句,这样i值就不会发生变化,而while循环条件还始终成立就
进入了死循环

板凳

我还是那个看法,应该尽量避免使用while...wend语句
因为它缺少exit语句,应该多用 do 语句
但在这个程序里用for就简洁多了。

   FOR n=101 TO 200 STEP 2
     k=INT(SQR(n))
     for i=2 to k
       IF n MOD i=0 THEN  exit for
     next
     IF  i>k THEN  PRINT n,
   NEXT n
   END


如果一定不想用for的话也可以是这样子:
FOR n=101 TO 200 STEP 2
    k=INT(SQR(n))
    i=2
    flag=0
   do WHILE i<=k
    IF n MOD i=0 THEN
      flag =1
      exit do
    ELSE
      i=i+1
    endif
   loop
   IF  flag=0 THEN  PRINT n,
   NEXT n
   END

楼主写的也没错,但效率还可以提高一点的。

3 楼

谢谢灵感,MOZ我好像明白了一点.

还有MOZ,你用EXIT 语句的方法好像对程序效率的提高很有帮助.

我来回复

您尚未登录,请登录后再回复。点此登录或注册