#include<stdio.h>
#include<string.h>
int main()
{
int a[10000],n,b[10000],t,i,u;
while(~scanf("%d",&n))
{
memset(a,0,sizeof(a));
t=0;
for(i=2;i<=n;i++)
{
if(a[i]==0)
{
a[i]=1;
b[t++]=i;
for(u=i+i;u<=n;u+=i)
{
a[u]=1;
}
}
}
for(i=0;i<t;i++)
{
printf("%d ",b[i]);
}
printf("\n");
}
return 0;
}
方法:
使用数组,对其全部赋0,表示未被标记。一个数
的倍数肯定不是素数,故循环从2开始将所所有数
的倍数标记,循环后未被标记的就是素数。