思路:创建一个筛子,当遇到从2开始的每一个素数时,将其存入素数组中,并将其倍数修改为0
细节:1,k的值需要重置,所以a的值既可以起到重置k也可以充当公差
2,最后j的值为素数的个数,故循环打印素数时应小于j
int main()
{
int N;
int j=0;
int a=0;
scanf("%d",&N);
int prime[N];
int seive[N+1];
for(int i=2;i<N+1;i++)
{
seive[i]=i;
}
for(int k=2;k<N+1;)
{
a=k;
if(seive[k]!=0)
{
prime[j]=seive[k];
j++;//j最后的值等于素数的个数
while(k<N+1)
{
seive[k]=0;
k=k+a;
}
k=a;
k++;
}
else k++;
}
for(int i=0;i<j;i++)
{
printf("%d ",prime[i]);
}
return 0;
}