求一个PASCAL程序

来源:百度知道 编辑:UC知道 时间:2024/05/10 23:19:17
请用筛选法输出所有在长整型范围内的素数.
要求:1、longint范围内。
2、用筛选法做。
谢谢,送上20分。
有好的答案,我追回到50分,先追加10分,绝不食言

用筛选法求1~N之间的所有素数。
分析:对于数组flag[1..n],先初始化假设全为true。首先flag[1]=false,接着从数组中找到第1个为true的数flag[2],那么在2以后的所有数中,将2的倍数的数赋值为false。接着再从数组中找到下一个为true的3,将3以后的3的倍数的数赋值为false,……。筛选法求素数的速度非常快,缺点是占用空间较多。
编写一个过程用于标识flag[1..X]中的素数。
procedure prime(x:longint);
var
i,j:longint;
begin
fillchar(flag,sizeof(flag),true);
flag[1]:=false; i:=1;
while i<x do
begin
i:=i+1;
if flag[i]=true then
begin
j:=i;
while j+i<=x do
begin j:=j+i; flag[j]:=false; end;
end;
end;
end;
源程序就这样
program lk;
var
flag:array[1..maxlongint] of boolean;
n,k:longint;

procedure prime(x:longint);
var
i,j:longint;
begin
fillchar(flag,sizeof(flag),true);
flag[1]:=false; i:=1;
while i<x do
begin
i:=i+1;
if flag[i]=true then
begin