n*log(n)的方法;
#include<cstdio>
#include<cstring>
#define MAX 1000000
int prime[MAX],mark[MAX];
int main(){
memset(mark,0,sizeof(mark));
int cnt = 0;
for (int i=2; i<=MAX; i++){
if (!mark[i]){
prime[cnt++] = i;
for (int j=i+i; j<=MAX; j+=i){
mark[j] = 1;
}
}
}
for (int i=0; i<cnt; i++)
printf("%d ",prime[i]);
printf("\n");
return 0;
}
O(n)的方法;
#include<cstdio>
#include<cstring>
#define MAX 1000000
int prime[MAX],mark[MAX];
int main(){
memset(mark,0,sizeof(mark));
int cnt = 0;
for (int i=2; i<=MAX; i++){
if (!mark[i]) prime[cnt++] = i;
for (int j=0; j<cnt && prime[j]*i <= MAX; j++){
mark[i*prime[j]] = 1;
if (i % prime[j] == 0) break;
}
}
for (int i=0; i<cnt; i++) printf("%d ",prime[i]);
printf("\n");
return 0;
}