题目
给定一个正整数n,请你求出1~n中质数的个数。
输入格式
共一行,包含整数n。
输出格式
共一行,包含一个整数,表示1~n中质数的个数。
数据范围
1≤n≤
输入样例
8
输出样例
4
代码
方法一:埃氏筛法
#include <iostream>
using namespace std;
const int N = 1000005;
bool st[N];
int main(){
int n,res = 0;
cin>>n;
for(int i = 2;i <= n;i++){
if(st[i]) continue;
res++;
for(int j = i;j <= n;j += i) st[j] = true;
}
cout<<res<<endl;
return 0;
}
方法二:线性筛法
#include <iostream>
using namespace std;
const int N = 1000005;
bool st[N];
int primes[N];
int main(){
int n,res = 0;
cin>>n;
for(int i = 2;i <= n;i++){
if(!st[i]) primes[res++] = i;
for(int j = 0;primes[j] <= n / i;j++){
st[i * primes[j]] = true;
if(!(i % primes[j])) break;
}
}
cout<<res<<endl;
return 0;
}