此筛法求素数就是:把从2开始的倍数依次筛掉,筛过的就不在继续筛了。
#include<iostream>
#include<cstdio>
#define maxn 100003
using namespace std;
int vis[maxn];//标记数组,0为素数,1为非素数
int main(){
vis[0]=1,vis[1]=1;
for(int i=2;i<=maxn/2;i++){
if(!vis[i]){
int bei=2;
while(i*bei<=maxn){
vis[i*bei]=1;
bei++;
}
}
}
for(int i=1;i<=maxn;i++){
if(!vis[i]) printf("%d\n",i);
}
return 0;
}