level 1
1lizezgeng
楼主
自己想的一个算法。
求10亿以内质数的个数和总和。
program P6_15;
uses sysutils;{计时}
var i,j,k,m:longint;
t:int64;
time:real;
n:array[1..1000000000] of boolean;
begin
readln(i);{读取质数个数}
time:=now;
n[1]:=true;
for j:=1 to i do
begin
if n[j]=false then
begin
k:=k+1;
t:=t+j;
for m:=j to trunc(i/j) do
n[m*j]:=true;
end;
end;
writeln('sum=',t);
writeln('total=',k);
writeln('used time=',(now-time)*86400:5:3,'s');
readln;
end.
实际运行:

网上搜到一个”欧拉线性筛法“,时间复杂度是O(N),要怎么改进?
2017年06月23日 04点06分
1
求10亿以内质数的个数和总和。
program P6_15;
uses sysutils;{计时}
var i,j,k,m:longint;
t:int64;
time:real;
n:array[1..1000000000] of boolean;
begin
readln(i);{读取质数个数}
time:=now;
n[1]:=true;
for j:=1 to i do
begin
if n[j]=false then
begin
k:=k+1;
t:=t+j;
for m:=j to trunc(i/j) do
n[m*j]:=true;
end;
end;
writeln('sum=',t);
writeln('total=',k);
writeln('used time=',(now-time)*86400:5:3,'s');
readln;
end.
实际运行:

网上搜到一个”欧拉线性筛法“,时间复杂度是O(N),要怎么改进?