B
beyondbit
Unregistered / Unconfirmed
GUEST, unregistred user!
100分请教一个求质数的问题,已经有一种算法,但是这个不完善,不能准确求出质数,比如15这个数字它就判断不出来
要求:
能够显示出计算结果内最大的质数。 如11,最大的质数是11。
能够显示出所有算出来的质数(做为一个選項,不需要一边计算一边显示,即,如果选
择“显示”质数選項的话,那么就必须将所计算出来的所有质数列举出来)。
能够显示出最短所需要的计算时间(在没有一边显示计算结果的情况之下,即,不选
择“显示”质数選項的情形)。
var
a:array of integer;
i,n,p,t,s,count:integer;
begin
n:=strtoint(edit1.Text);
setlength(a,n+1);
//开始筛选 0表示不是质数 ,1表示质数在其中
for i:=n downto 2 do //质数是从2开始的数字
begin
a:=1;
end;
for i:=(n div 2) downto 2 do //2的1倍以上的倍数也不为质数
begin
a[i*2]:=0;
end;
p:=2;
while (p*p<n) do
begin
a[p*p]:=0;
p:=p+1;
while(a[p]=0)do
begin
p:=p+1;
t:= p * p;
s:= 2 * p;
end;
while(t <= n) do
begin
a[t]:= 0;
t:= t + s;
end;
end;
count:=0;
for i:=n downto 2 do
begin
if a=1 then
begin
//edit3.Text:=inttostr(a);
count:=count+1;
end;
edit2.Text:=inttostr(count);
end;
要求:
能够显示出计算结果内最大的质数。 如11,最大的质数是11。
能够显示出所有算出来的质数(做为一个選項,不需要一边计算一边显示,即,如果选
择“显示”质数選項的话,那么就必须将所计算出来的所有质数列举出来)。
能够显示出最短所需要的计算时间(在没有一边显示计算结果的情况之下,即,不选
择“显示”质数選項的情形)。
var
a:array of integer;
i,n,p,t,s,count:integer;
begin
n:=strtoint(edit1.Text);
setlength(a,n+1);
//开始筛选 0表示不是质数 ,1表示质数在其中
for i:=n downto 2 do //质数是从2开始的数字
begin
a:=1;
end;
for i:=(n div 2) downto 2 do //2的1倍以上的倍数也不为质数
begin
a[i*2]:=0;
end;
p:=2;
while (p*p<n) do
begin
a[p*p]:=0;
p:=p+1;
while(a[p]=0)do
begin
p:=p+1;
t:= p * p;
s:= 2 * p;
end;
while(t <= n) do
begin
a[t]:= 0;
t:= t + s;
end;
end;
count:=0;
for i:=n downto 2 do
begin
if a=1 then
begin
//edit3.Text:=inttostr(a);
count:=count+1;
end;
edit2.Text:=inttostr(count);
end;