1、埃氏筛
const int N = 1e6+5;
bool vis[N];
int prime[N],cnt; //数组存质数
void get_prime(int x) //获取1~x内的质数
{
for(int i=2;i<=x;i++)
{
if(!vis[i]) //如果该数没有被筛掉,说明它是质数
{
prime[cnt++]=i;//加入质数表
for(int j=i+i;j<=x;j+=i) vis[j]=1;//将它的所有倍数筛掉
}
}
}
int main()
{
int n;
cin>>n;
get_prime(n);
cout<<cnt<<endl;
return 0;
}
2、线性筛
const int N = 1e6+5;
bool vis[N];
int prime[N],cnt;
void get_prime(int x)
{
for(int i=2;i<=x;i++)
{
if(!vis[i]) prime[cnt++]=i; //加入质数表
for(int j=0;prime[j]<=x/i;j++)
{
vis[prime[j]*i]=1; //prime[j]一定是prime[j]*i的最小质因子
if(i%prime[j]==0) break;
}
}
}
int main()
{
int n;
cin>>n;
get_prime(n);
cout<<cnt<<endl;
return 0;
}