📅  最后修改于: 2023-12-03 15:28:04.934000             🧑  作者: Mango
本文将介绍一个用 C++ 编写的程序,能够计算指定范围内的所有素数。该程序采用了欧拉筛法,具有较快的运行速度。
欧拉筛法,也称线性筛法,是一种快速筛选素数的方法。与传统方法不同,欧拉筛法在筛选过程中,一个数只会被它的最小质因子筛去一次,因此时间复杂度为 $O(n)$。
算法步骤如下:
下面给出欧拉筛法的 C++ 实现代码:
vector<int> getPrimes(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 = 0; j < primes.size() && i * primes[j] <= n; ++j) {
is_prime[i * primes[j]] = false;
if (i % primes[j] == 0) {
break;
}
}
}
return primes;
}
该函数接收一个正整数 $n$,返回一个 vector,其中包含指定范围内的所有素数。
注:该代码需要包含 vector
和 algorithm
头文件。
欧拉筛法的时间复杂度为 $O(n)$,因此该程序的运行速度相对较快。
但需要注意的是,空间复杂度为 $O(n)$,如果需要计算较大范围内的素数,可能会有内存溢出的风险。因此,可以通过逐步遍历较小范围内的素数来减少内存使用。
本文介绍了一个用 C++ 编写的计算范围内素数的程序,采用了欧拉筛法,并给出了该算法的实现代码。相对于传统方法,欧拉筛法具有更快的运行速度,是一种较为高效的素数筛选方法。