主题:用“欧拉筛法”求质数
飞鸟12
[专家分:2830] 发布于 2005-03-26 10:15:00
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个回复)
沙发
rickone [专家分:15390] 发布于 2004-06-26 15:35:00
程序死循环了。
说说原理算法。
板凳
myhnssk [专家分:560] 发布于 2004-06-26 22:40:00
这是什么程序啊, 晕!!
3 楼
公孙成 [专家分:1040] 发布于 2004-06-26 23:28:00
请楼主说说这个程序的目的.
4 楼
staa [专家分:3690] 发布于 2004-06-28 00:56:00
后面这段:
FOR i=1 TO 100
DO WHILE a(i)<>0
PRINT a(i)
LOOP
NEXT i
有些莫名其妙
5 楼
yangyifei [专家分:660] 发布于 2004-06-28 15:04:00
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 楼
yangyifei [专家分:660] 发布于 2004-06-28 15:04:00
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 楼
prairiewolf [专家分:290] 发布于 2005-07-10 06:37:00
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 楼
moz [专家分:37620] 发布于 2005-07-11 01:27:00
第一, 飞鸟是什么时候进论坛的?
怎么2005年发的贴他们可以在2004年回复的?
第二, 程序看上去没什么错误,
为什么他们说有死循环?
是不是后面改过来的?
第三, 原理其实很简单,
把从小到大的i的倍数全剔除后剩下的就是质数了.
9 楼
飞鸟12 [专家分:2830] 发布于 2005-07-11 14:07:00
程序是04年发的,后来(05年)修改几次.
开始发的是i = j(笔误),应为j = i
至于我什么时候注册的, 你看看我的个人信息不就知道了吗?
我来回复