回 帖 发 新 帖 刷新版面

主题:用“欧拉筛法”求质数

CLS
DIM a(100)
FOR i = 1 TO 100
  a(i) = i
NEXT i
a(1) = 0: i = 2
DO
  j = i                            ' a(2)=2,a(4)=0,a(6)=0,a(8)=0……
  DO
    a(i + j) = 0
    j = j + i                       'a(3)=3,a(6)=0,a(9)=0,a(12)=0……
  LOOP UNTIL i + j > 100
  DO
    i = i + 1                       'a(5)=5,a(10)=0,a(15)=0,a(20)=0……
  LOOP UNTIL a(i) <> 0
LOOP UNTIL i >= 50                 ' ……
FOR i = 1 TO 100
  IF a(i) <> 0 THEN            '若a(i)为质数,则a(i)的倍数均为0
    PRINT a(i),
  END IF
NEXT i
END

回复列表 (共9个回复)

沙发

程序死循环了。

说说原理算法。

板凳

这是什么程序啊, 晕!!

3 楼

请楼主说说这个程序的目的.

4 楼

后面这段:
FOR i=1 TO 100
  DO WHILE a(i)<>0
    PRINT a(i)
  LOOP
NEXT i
有些莫名其妙

5 楼

DO
  i=j                               a(2)=2,a(4)=0,a(6)=0,a(8)=0……
  DO
    a(i+j)=0
    j=j+i                           a(3)=3,a(6)=0,a(9)=0,a(12)=0……
  LOOP UNTIL i+j>100
程序在这里就已经是死循环了
i = j
j 没有初值,电脑自动设为0
所以,程序是死循环

6 楼

DO
  i=j                               a(2)=2,a(4)=0,a(6)=0,a(8)=0……
  DO
    a(i+j)=0
    j=j+i                           a(3)=3,a(6)=0,a(9)=0,a(12)=0……
  LOOP UNTIL i+j>100
程序在这里就已经是死循环了
i = j
j 没有初值,电脑自动设为0
所以,程序是死循环

7 楼

a(1) = 0: i = 2
DO
  j = i                            ' a(2)=2,a(4)=0,a(6)=0,a(8)=0……
  DO
    a(i + j) = 0
    j = j + i                       'a(3)=3,a(6)=0,a(9)=0,a(12)=0……
  LOOP UNTIL i + j > 100
这里的i = 2不是已经赋过了吗,i=2,j=2,j+i=4,我觉得i, j不是零,但这个程序仍是死循环。
为什么你们说j无初值?

8 楼

第一, 飞鸟是什么时候进论坛的?
      怎么2005年发的贴他们可以在2004年回复的?

第二, 程序看上去没什么错误,
      为什么他们说有死循环?
      是不是后面改过来的?

第三, 原理其实很简单,
      把从小到大的i的倍数全剔除后剩下的就是质数了.

9 楼

程序是04年发的,后来(05年)修改几次.
开始发的是i = j(笔误),应为j = i

至于我什么时候注册的, 你看看我的个人信息不就知道了吗?

我来回复

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