欧式筛法
#include<iostream>
#include<cstdio>
#include<cstring>
#define N 10001
using namespace std;
int prime[N];
int cnt;
void IsPrime(int n){
int a[n+1];
memset(a,0,sizeof(a));
int i,j;
for(i = 2;i<=n;i++){
if(!a[i])prime[cnt++] = i; //最初默认所有的数都为质数
for(j = 0;j<cnt&&i*prime[j]<=n;j++){
a[i*prime[j]] = 1; //筛去i的质数倍
if(i%prime[j]==0)break; //保证每个合数被最小的质因子筛去(避免重复)
}
}
}
int main(){
IsPrime(10001);
for(int i = 0;i<cnt;i++)
printf("%d ",prime[i]);
return 0;
}