算法笔记练习 5.4 素数 问题 B: Prime Number
题目
题目描述
Output the k-th prime number.
输入
k≤10000
输出
The k-th prime number.
样例输入
10
50
样例输出
29
229
思路
用埃氏筛法打素数表。
代码
#include <stdio.h>
// 多次测试的结果
// [2,105000) 里有 10024 个素数,满足题目所需
#define MAX 105000
int table[MAX];
int isPrime[MAX];
int findPrime(void) {
int i, j, cnt = 0;
for (i = 2; i < MAX; ++i)
isPrime[i] = 1;
for (i = 2; i < MAX; ++i) {
if (isPrime[i]) {
table[cnt++] = i;
for (j = i; j < MAX; j += i)
isPrime[j] = 0;
}
}
return cnt;
}
int main() {
int n;
int cnt = findPrime();
while (scanf("%d", &n) != EOF)
printf("%d\n", table[n-1]); // 注意 n-1
return 0;
}