如何利用C++实现埃拉托斯特尼筛法(筛选法)来高效地找出2到200之间的所有素数?
时间: 2024-11-23 16:35:39 浏览: 20
埃拉托斯特尼筛法是一种古老且高效的算法,用于找出一定范围内的所有素数。要使用C++实现这一算法,首先需要准备一个布尔类型的数组,大小至少为待筛选的最大数加一(在这个例子中是201),用于表示每个数是否为素数。接下来,通过循环来实现筛法的核心步骤。
参考资源链接:[C++实现筛选法求素数:从2到200](https://wenku.csdn.net/doc/4nr4jmbim0?spm=1055.2569.3001.10343)
第一步,初始化数组,将所有数标记为素数(true),因为一开始我们认为所有数都有可能是素数。
第二步,从数组的第二个位置开始(即索引1),将所有非素数的标记置为非素数(false)。
第三步,找到第一个标记为素数(true)的数,它就是当前最小的素数。
第四步,遍历到数组的末尾,将该素数的所有倍数的标记置为非素数(false)。
重复第三步和第四步,直到到达或超过指定的上限(200)。
示例代码如下:
```cpp
#include <iostream>
#include <vector>
#include <cmath>
int main() {
const int MAX = 200; // 求解2到200之间的素数
std::vector<bool> isPrime(MAX + 1, true); // 从2开始到MAX,初始化所有数为素数
// 筛选法
for (int i = 2; i <= std::sqrt(MAX); ++i) {
if (isPrime[i]) {
for (int j = i * i; j <= MAX; j += i) {
isPrime[j] = false; // 将i的倍数标记为非素数
}
}
}
// 输出所有素数
for (int i = 2; i <= MAX; ++i) {
if (isPrime[i]) {
std::cout << i <<
参考资源链接:[C++实现筛选法求素数:从2到200](https://wenku.csdn.net/doc/4nr4jmbim0?spm=1055.2569.3001.10343)
阅读全文