请高手一句一句分析这段pascal 程序

来源:百度知道 编辑:UC知道 时间:2024/05/28 08:32:07
2.program t2;
const n=200;
var si,pr:set of 2..n;
x,j,m:integer;
begin
readln(m);
si:=[2..m];pr:=[];
x:=2;
repeat
while not(x in si) do x:=succ(x);
pr:=pr+[x];
j:=x;
while j <= m do
begin si:=si-[j];j:=j+x; end;
until si=[ ];
j:=0;
for x:=m downto 2 do
if x in pr then
begin
write(x:5);inc(j);
if j mod 10=0 then writeln;
end;
writeln;

这是利用集合实现筛选法求素数
const n=200;
var si,pr:set of 2..n; 定义集合
x,j,m:integer;
begin
readln(m); 筛选素数范围
si:=[2..m];pr:=[]; si为被筛集合,pr为素数集合
x:=2;
repeat
while not(x in si) do x:=succ(x); 循环找到素数x
pr:=pr+[x]; 将素数x加入素数集合pr
j:=x;
while j <= m do
begin si:=si-[j];j:=j+x; end; 所以为x倍数的数从计划si中删去
until si=[ ]; 直到si被筛空
j:=0;
for x:=m downto 2 do 倒序输出m以内素数
if x in pr then
begin
write(x:5);inc(j);
if j mod 10=0 then writeln; 10个一行
end;
writeln;
end.

这是利用集合实现筛选法求素数
const n=200;
var si,pr:set of 2..n; 定义集合
x,j,m:integer;
begin
readln(m); 筛选素数范围
si:=[2..m];pr:=[]; si为被筛集合,pr为素数集合
x:=2;
repeat
while not(x in si) do x:=succ(x);