【线性筛】线性筛素数

链接

YbtOJ6-2-1

题目描述

给定一个范围,有 q个询问,每次输出第 k 小的素数。

思路

欧拉筛

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>

using namespace std;

int n, a[350000005], p[35000005], num, q, k;

int main()
{
    
    
	scanf("%d%d", &n, &q);
	a[0] = a[1] = 1;
	for(int i = 2; i <= n; ++i)
	{
    
    
		if(!a[i]) p[++num] = i;
		for(int j = 1; j <= num && i * p[j] <= n; ++j)
		{
    
    
			a[p[j] * i] = 1;
			if(i % p[j] == 0) break;
		} 
	}
	for(int i = 1; i <= q; ++i)
	{
    
    
		scanf("%d", &k);
		printf("%d\n", p[k]);
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/LTH060226/article/details/121865359