埃氏筛法:
#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;
}
京公网安备 11010502036488号