如何使用C++编程语言实现埃拉托斯特尼筛法(筛选法)来找出2到200之间的所有素数?
时间: 2024-11-23 15:35:38 浏览: 33
埃拉托斯特尼筛法是一种古老的算法,用来找出小于等于给定数值N的所有素数。C++因其强大的数据结构和性能,非常适合实现这种算法。以下是一个具体的实现步骤和示例代码:
参考资源链接:[C++实现筛选法求素数:从2到200](https://wenku.csdn.net/doc/4nr4jmbim0?spm=1055.2569.3001.10343)
1. 初始化一个布尔数组,大小为N+1(N是给定的上限,本例中为200),并将除了0和1以外的所有元素标记为true,表示所有数最初都被认为是素数。
2. 从2开始,对于每一个标记为true的元素,将其所有大于等于它的倍数的元素标记为false,因为这些数不可能是素数。
3. 重复步骤2,直到遍历到sqrt(N)即可。因为如果N不是素数,它必定有一个因子不大于其平方根。
4. 最后,数组中值为true的索引即为素数。
示例代码如下:
```cpp
#include <iostream>
#include <vector>
#include <cmath>
int main() {
const int N = 200; // 设定上限
std::vector<bool> prime(N+1, true); // 初始化标记数组
prime[0] = prime[1] = false; // 0和1不是素数
// 实现筛法
for(int i = 2; i <= sqrt(N); ++i) {
if(prime[i]) {
for(int j = i*i; j <= N; j += i) {
prime[j] = false;
}
}
}
// 输出素数
for(int i = 2; i <= N; ++i) {
if(prime[i]) {
std::cout << i <<
参考资源链接:[C++实现筛选法求素数:从2到200](https://wenku.csdn.net/doc/4nr4jmbim0?spm=1055.2569.3001.10343)
阅读全文