c++筛质数的所有算法
时间: 2024-09-20 13:17:28 浏览: 30
在C++中,筛选素数(Prime Number Sieve)通常使用埃拉托斯特尼筛法(Sieve of Eratosthenes)是最常见的方法,这是一种简单而有效的算法。以下是基本步骤:
1. **创建一个布尔数组**:数组的长度是待检查的最大整数加一,所有元素初始化为`true`,表示它们最初都被认为可能是素数。
2. **从2开始**:将索引2(第一个素数)标记为`false`,因为除了1之外,2本身就是唯一的偶数素数。
3. **遍历数组内的数**:对于每个已知的素数(当前遍历到的数),将它的所有倍数(从它的平方开始,每次增加这个素数)标记为非素数。例如,如果已经找到了5,那么就将6、10、14...等都标记为非素数。
4. **继续到下一个未被标记的数**:找到下一个仍被标记为`true`的数,它是下一个素数,然后重复步骤3。
5. **最终结果**:数组中剩下的所有`true`位置对应的数字就是素数。
以下是简单的C++实现代码示例:
```cpp
#include <iostream>
#include <vector>
std::vector<int> sieveOfEratosthenes(int n) {
std::vector<bool> primes(n + 1, true);
primes[0] = primes[1] = false;
for (int i = 2; i * i <= n; ++i) {
if (primes[i]) {
for (int j = i * i; j <= n; j += i)
primes[j] = false;
}
}
std::vector<int> result;
for (int i = 2; i <= n; ++i) {
if (primes[i])
result.push_back(i);
}
return result;
}
int main() {
int maxNum = 50; // 可以替换为你想要查找素数的上限
std::vector<int> primes = sieveOfEratosthenes(maxNum);
for (const auto &prime : primes)
std::cout << prime << " ";
return 0;
}
阅读全文