线性筛素数
题目链接:ybt高效进阶6-2-1 / luogu P3383
题目大意
给出 n,多次询问每次给出 k,要你找到 1~n 中的第 k 个质数。
思路
没啥好说的直接欧拉筛胡过去。
代码
#include<cstdio>
using namespace std;
int n, q, k, prime[10000001];
bool np[100000001];
int main() {
scanf("%d %d", &n, &q);
for (int i = 2; i <= n; i++) {
if (!np[i]) {
prime[++prime[0]] = i;
}
for (int j = 1; j <= prime[0] && 1ll * i * prime[j] <= n; j++) {
np[i * prime[j]] = 1;
if (i % prime[j] == 0) break;
}
}
while (q--) {
scanf("%d", &k);
printf("%d\n", prime[k]);
}
return 0;
}