P3383 【模板】线性筛素数

解题思路

素数 指只有 11 和它本身 22 个因数的自然数。

可使用 欧拉筛法 。

复杂度 O(n)O(n)

另外 11 不是素数, 要特判一下。

AC CODE

#include<bits/stdc++.h>
using namespace std;

bool isPrime[100000010];
int Prime[6000010], cnt = 0;

void GetPrime(int n)
{
	memset(isPrime, 1, sizeof(isPrime));
	isPrime[1] = 0;
	
	for(int i = 2; i <= n; i++)
	{
		if(isPrime[i])
			Prime[++cnt] = i;
			
		for(int j = 1; j <= cnt && i * Prime[j] <= n; j++) 
		{
			isPrime[i * Prime[j]] = 0;
			if(i % Prime[j] == 0)
				break;
		}
	}
}

signed main()
{
	int n, q;
	scanf("%d %d", &n, &q);
	GetPrime(n);
	while (q--)
	{
		int k;
		scanf("%d", &k);
		printf("%d\n", Prime[k]);
	}
	return 0;
}
posted @ 2021-07-12 13:43  蒟蒻orz  阅读(2)  评论(0编辑  收藏  举报  来源