素数个数
时间限制: 5 Sec 内存限制: 128 MB
题目描述
求{1, 2, … , N } 中素数的个数。
输入
1 个整数N 。
输出
1 个整数,表示素数的个数。
样例输入
10
样例输出
4
提示
对于40% 的数据,1 ≤ N ≤ 10^6;
对于80% 的数据,1 ≤ N ≤ 10^7;
对于100% 的数据,1 ≤ N <6*10^7;
题解
- O(N)Euler在时间复杂度上是可以的
- 但在空间复杂度上会爆
- check数组变boolean
- prime数组最大为3562115(6*10^7内有3562115个素数)
- 水题
var
check:array[0..60000000]of boolean;
prime:array[0..3562115]of longint;
i,j,t,n:longint;
begin
readln(n);
for i:=2 to n do
check[i]:=true;
check[1]:=false;
for i:=2 to n do
begin
if check[i]=true
then
begin
inc(t);
prime[t]:=i;
end;
for j:=1 to t do
begin
if prime[j]*i>n
then break;
check[prime[j]*i]:=false;
if i mod prime[j]=0
then break;
end;
end;
writeln(t);
end.