线性筛O(n)而埃氏筛进行筛时会重复筛,线性筛不会出现这个问题
线性筛:对于某个合数使用其最小质因子筛去
st[primes[j] * i] = true; 因为这句话只会被执行一次,所以复杂度O(fn)
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
bool st[N];
int cnt,n,p[N];
void get_primes(int n)
{
for(int i=2;i<=n;i++)
{
if(!st[i]) p[cnt++]=i;
for(int j=0;p[j]*i<=n;j++)
{
st[i*p[j]]=true;
if(i%p[j]==0) break;
}
}
}
int main()
{
cin>>n;
get_primes(n);
cout<<cnt;
}