这是一道用集合筛选求质数的题目,程序如下:
const
n=200;
var
s,primes:set of 2..n;
procedure main;
var p,c:2..400;
begin
s:=[2..n];
primes:=[];
p:=2;
c:=2;
repeat
while not (c in s) do p:=p+1;
while not (p in s) do
begin
p:=p+1;
end;
primes:=primes+[p];
c:=p;
while c<=n do
begin
s:=s-[c];
c:=c+p;
end;
until s=[];
end;
procedure print;
var i:2..200;
j:integer;
begin
j:=0;
for i:=2 to 200 do
if i in primes then
begin
write(i:5);
j:=j+1;
if (j mod 10=0) then writeln;
end;
end;
begin
main;
print;
end.
请高手指点。