#include<stdio.h>
int a[999999],vis[999999];// a存素数 vis标记
int main()
{
int k=0;
for(int i=2;i<999999;++i){//++i效率高
if(vis[i]==0){
a[++k]=i;
}
for(int j=0;(j<=k)&&(i*a[j])<999999;++j){
vis[i*a[j]]=1;//a[]的倍数一定不是素数,标记
if(i%a[j]==0)break;//保证只被最小质因子筛一次
}
}
return 0;
}
要是不打表,直接输出的话,就定义一个布尔数组来存是否素数,输出下标即可,这样可以节省空间。