埃氏筛法:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 10000000;
int prime[maxn];
bool IsPrime[maxn] = {0};//0代表都是素数
void Find_Prime(){
    IsPrime[1] = 1;//1不是素数
    int pNum = 1;
    for(int i = 2; i <= maxn; i++){
        if(!IsPrime[i])
            prime[pNum++] = i;
        for(int j = i * i; j <= maxn; j += i){
            IsPrime[j] = true;
        }
    }
}
int main(){
    int k;
    Find_Prime();
    while(~scanf("%d", &k)){
        printf("%d\n", prime[k]);
    }
    return 0;
}

欧拉筛法

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 10000000;
int prime[maxn];
bool IsPrime[maxn];//0代表都是素数
void Find_Prime(){
    IsPrime[1] = 1;//1不是素数
    int pNum = 0;
    for(int i = 2; i <= maxn; i++){
        if(!IsPrime[i]){
            prime[pNum++] = i;   
        }
        for(int j = 0; j < pNum && i * prime[j] <= maxn; j++){
            IsPrime[i * prime[j]] = 1;
            if(i % prime[j] == 0){
                break;
            }
        }
    }
}
int main(){
    int k;
    Find_Prime();
    while(~scanf("%d", &k)){
        printf("%d\n", prime[k - 1]);
    }
    return 0;
}