如何使用C++实现埃拉托斯特尼筛法求解2到200间的所有素数?请提供完整的代码实现。
时间: 2024-11-29 20:19:47 浏览: 0
埃拉托斯特尼筛法是一种经典的算法,用于找出一个给定范围内的所有素数。为了实现这一算法,推荐参考以下资源:《C++程序设计:筛选取法实现2~200间素数》。这份材料详细讲解了如何在C++中应用筛选取法,并给出了具体的代码实现。
参考资源链接:[C++程序设计:筛选取法实现2~200间素数](https://wenku.csdn.net/doc/44cv8q7p4e?spm=1055.2569.3001.10343)
在C++中实现埃拉托斯特尼筛法,主要步骤如下:
1. 定义一个布尔数组`bool prime[201]`,初始化所有元素为`true`,表示200以内的所有数默认都是素数。
2. 从2开始,对于数组中的每一个数`i`,如果它仍然是`true`(即未被标记为非素数),则它一定是素数。此时将`i`的每个倍数(`i*2`、`i*3`等)都设置为`false`,表示它们不是素数。
3. 这个过程一直持续到`sqrt(200)`,因为超过这个值的倍数在之前的步骤中已经被标记。
4. 最后,遍历数组`prime`,输出所有标记为`true`的索引值,这些就是2到200之间的所有素数。
具体的C++代码实现如下:
```cpp
#include <iostream>
#include <cmath>
using namespace std;
const int MAX = 200;
bool prime[MAX + 1]; // 初始化所有元素为true
void SieveOfEratosthenes() {
memset(prime, true, sizeof(prime)); // 将所有元素初始化为true
for (int p = 2; p * p <= MAX; p++) {
// 如果prime[p]没有被改变,那么它是一个素数
if (prime[p] == true) {
// 更新所有p的倍数,设置为非素数
for (int i = p * p; i <= MAX; i += p)
prime[i] = false;
}
}
// 输出所有素数
for (int p = 2; p <= MAX; p++)
if (prime[p])
cout << p <<
参考资源链接:[C++程序设计:筛选取法实现2~200间素数](https://wenku.csdn.net/doc/44cv8q7p4e?spm=1055.2569.3001.10343)
阅读全文