📅  最后修改于: 2023-12-03 15:41:08.685000             🧑  作者: Mango
筛网是一种快速找出素数的算法。该算法的基本思想是从2开始,将每个质数的倍数都标记成合数,然后再从未被标记的数中找到下一个质数,重复上述步骤。
筛网算法的复杂度为O(n*log(log(n))),是一种高效的筛素数的算法。
下面是C++实现的代码片段:
vector<int> sieve(int n) {
vector<bool> is_prime(n + 1, true);
vector<int> primes;
for (int i = 2; i <= n; ++i) {
if (is_prime[i]) {
primes.push_back(i);
for (int j = i * i; j <= n; j += i) {
is_prime[j] = false;
}
}
}
return primes;
}
这个函数的输入参数是正整数n,输出的是一个vector,包含2到n之间的所有素数。
该函数的时间复杂度为O(n*log(log(n))),空间复杂度为O(n)。
下面是一些优化的思路:
筛网算法是一种高效的找出素数的算法,其实现非常简单,时间复杂度较低。在实际应用中,可以根据自己的需要进行优化,提高执行效率。