#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#define ll long long
using namespace std;
const int mx = 1e5;
int prim[20000];
bool vis[mx];

void da(){
memset(vis,0,sizeof(vis));
int tol = 0;
for(int i = 2; i < mx ; i++){
if(!vis[i])
prim[tol++] = i;
for(int k = 0; k < tol && prim[k]*i < mx; k++){
// if(vis[prim[k]*i] ==1)
// cout<<"zha"<<endl;
vis[prim[k]*i] =1;
if(i%prim[k] == 0)
break;
}
}
}

int main(){
da();
for(int i = 0; i < 10 ; i++)
cout<<prim[i]<<endl;
return 0;
}

 

 

比较省空间的方法

 

/*=================================*\ 
素数打表
该函数执行后在prim[]数组中存入
从2开始的从小到大的numOfPrim个素数
\*=================================*/
const int numOfPrim = 1000;
int prim[numOfPrim] = {2,3};
void prime(){
int tally=2;
bool flag;
for(int i=5 ; tally<numOfPrim ; i+=2){
flag = true;
for(int j=0 ; prim[j]*prim[j]<=i ; j++)
if( i%prim[j]==0 ){ flag = false; break; }
if( flag ){
prim[tally]=i;
tally++;
}
}
}