c++素数筛例题
时间: 2025-04-28 18:25:54 浏览: 37
### C++ 素数筛法简介
素数筛是一种用于高效查找一定范围内所有素数的算法。最常见的素数筛选方法有“埃拉托斯特尼筛法”(Sieve of Eratosthenes)。该算法的基本思想是从最小的素数开始,逐步标记其倍数为非素数,并继续处理下一个未被标记的数字。
#### 埃拉托斯特尼筛法步骤:
1. **初始化**:创建一个布尔数组 `isPrime[]`,大小为 `n+1` 并将其所有的值设为 `true`。这里假设我们要找出从 0 到 n 的所有素数。
2. **遍历**:将 `isPrime[0]` 和 `isPrime[1]` 设为 `false`,因为它们不是素数。
3. **筛选过程**:对于每一个 i (i >= 2),如果它还是 `true`,那么它就是素数;接下来把它的平方及以后的所有倍数都标成 `false`。
4. **结果提取**:最后剩下的 `true` 对应的位置即为所求区间内的全部素数。
下面给出一段具体的示例代码来演示如何利用此方法计算给定范围内的所有质数。
```cpp
#include <iostream>
#include <vector>
using namespace std;
void sieveOfEratosthenes(int n) {
vector<bool> isPrime(n + 1, true); // 初始化全为真
for (int p = 2; p * p <= n; ++p) { // 只需检查到 sqrt(n)
if (isPrime[p]) { // 如果当前元素是质数,则:
for (int multiple = p * p; multiple <= n; multiple += p){
isPrime[multiple] = false; // 将这个质数的所有倍数标记为合数
}
}
}
cout << "Primes up to " << n << ": ";
for (int p = 2; p <= n; ++p){ // 输出最终的结果集里的质数们
if (isPrime[p])
cout << p << ' ';
}
}
// 测试函数
int main() {
int maxNum;
cin >> maxNum; // 用户输入上限数值
sieveOfEratosthenes(maxNum);
return 0;
}
```
以上程序可以接受用户提供的最大整数作为参数,并打印出不大于该整数的所有质数列表。
阅读全文
相关推荐










