PASCAL 筛法求素数

2024-12-30 02:31:17
推荐回答(1个)
回答1:

主要问题是越界,第一个越界是:
while not a[i] do i:=i+1;
应为:
while not a[i] do i:=i+1;

第二个是:
for i:=1 to 100 do
if a[i] then write(i,'');
应为:
for i:=2 to 100 do
if a[i] then write(i,' ');

其实写程序前应该先想好思路,然后尽可能第简洁写完整个程序,我可能会这样写:

var i,j:longint;
a:array[1..101]of boolean;
begin
fillchar(a,sizeof(a),true);
for i:=2 to 100 do begin
if(a[i])then begin
j:=2*i;
while j<=100 do begin
a[j]:=false;
inc(j,i);
end;
end;
end;
for i:=1 to 100 do
if(a[i])then write(i,' ');
end.

可能用for代替while会好些.