主要问题是越界,第一个越界是:
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会好些.