【求助】这个50000以内素数表的程序哪儿错了?
pascal吧
全部回复
仅看楼主
level 3
program get;
var
i,j,m:longint;
p:array[1..50000] of boolean;
begin
fillchar(p,sizeof(p),true);
p[1]:=false;p[50000]:=false;
i:=2;
while i<50000 do
begin
j:=i*2;
while j<50000 do
begin
p[j]:=false;
j:=j+i;
end;
inc(i);
end;
for i:=1 to 50000 do
begin
if p[i]=true then
begin
inc(m);
a[m]:=i;
end;
end;
write(m);
for i:=1 to m do write(a[i]:7);
end.
谢谢!
2014年05月20日 09点05分 1
level 11
似乎是编译错误,还要再开一个叫a的longint型数组
(其实不开数组也完全可以的)
2014年05月22日 15点05分 2
谢谢!不过不好意思,把a数组打掉了,但是不开数组直接输出时也不行,从14000多开始的,我试了一下,计数是对的,5133,换成20000以内也打得出来,不知道为什么。。。
2014年05月22日 15点05分
回复 夏夜裏的落樱 :这是因为pascal的标准输入输出有一定的范围限制,如果输出的数太多前面的就显示不了。如果要看完整的素数表要用文件输入输出
2014年05月22日 15点05分
回复 abslime :醍醐灌顶啊,太谢谢了~
2014年05月24日 05点05分
回复 夏夜裏的落樱 :不用谢
2014年05月24日 05点05分
1