#include<bits/stdc++.h>
using namespace std;
#define LL long long
const int N=1e7+9;
bool f[N]={1,1};
int pri[N],prime[N];//欧拉筛法
void prime1() //埃氏筛法
{
int k=sqrt(N);
for(int i=2;i<=k;i++)
{
if(f[i]==0)
{
for(int j=i*i;j<=N;j=j+i)
f[j]=1;
}
}
}
int main()
{
int res=0;
int n,pp=0;
cin>>n;
memset(pri,1,sizeof(pri));//pri[i]==1,i是质数
pri[0]=0;pri[1]=0;
for(int i=2;i<=n;i++)//欧拉筛
{
if(pri[i])
{
prime[++pp]=i;
res++;
}
for(int j=1;prime[j]*i<=N&&j<=pp;j++)
{
pri[prime[j]*i]=0;
if(i%prime[j]==0)
break;
}
}
printf("1到n的质数个数:%d\n",res);
for(int i=1;i<=res;i++)
{
printf("%5d\n",prime[i]);
}
return 0;
}
质数筛(欧拉,埃氏)
最新推荐文章于 2024-07-18 10:23:21 发布