给定一个正整数 n,请你求出 1∼n1 中质数的个数。
输入格式
共一行,包含整数 n。
输出格式
共一行,包含一个整数,表示 1∼n1 中质数的个数。
数据范围
1≤n≤106
#include<iostream>
using namespace std;
const int N=1000010;
int primes[N];
bool st[N];
int cn=0;
void get(int n){//以10为例
for(int i=2;i<=n;i++){
if(st[i]) continue;//st[2]=0//st[3]=0
//primes[1]=2//primes[2]=3//primes[3]=5
primes[cn++]=i;
for(int j=i+i ;j<=n;j+=i) st[j]=true;//j=3;j<=10 st[3/6/9]=1//primes[2/4/6/8/10]=1//primes[5/10]=1
}
}//这种算法实际减少了运算量,以开始的2、3开头,进行后续的推进
int main(){
int n;
cin>>n;
get(n);
cout<<cn<<endl;
return 0;
}
输入样例:
8
输出样例:
4