http://ac.jobdu.com/problem.php?pid=1040
两种方法:
#include <stdio.h>
#include <cmath>
#include <cstring>
#define MAXN 2000000
static int primes[10001],nPrimes;
static bool mark[MAXN];
void init0(){
memset(mark,true,sizeof(mark));
nPrimes=0;
for (int i = 2; i < MAXN ; ++i) {
if(!mark[i]) continue;
primes[nPrimes++] = i;
for (int j = i*i; j < MAXN; j+=i) {
mark[j] = false;
}
}
}
bool judge(int n){
if(n<=1) return false;
if(n==2) return true;
if(n%2==0) return false;
for (int i = 3; i <=sqrt(n) ; i+=2) {
if(n%i == 0) return false;
}
return true;
}
void init1(int k){
nPrimes = 0;
primes[nPrimes++] = 2;
int i=3;
while(nPrimes<k){
if(judge(i))
primes[nPrimes++] = i;
i++;
}
}
int main(){
// init0();
init1(10000);
int k;
while(scanf("%d",&k)!=EOF){
printf("%d\n",primes[k-1]);
}
}