C++实现筛选法求2~200间素数
需积分: 0 20 浏览量
更新于2024-08-24
收藏 8.81MB PPT 举报
"用筛选取法(Sieve of Eratosthenes)求出2~200之间的所有素数,这是一种经典的算法,通过标记合数来找出素数。"
在编程领域,尤其是使用C++时,求解素数是一项常见的任务。筛选取法是一种高效且直观的方法,尤其适合于找出一个范围内所有的素数。该方法的基本思想是从小到大遍历数字,首先将2及其倍数标记为非素数,然后依次标记3的倍数、5的倍数等,直到遍历到平方根范围内的所有质数。在遍历过程中未被标记的数字即为素数。
以下是筛选取法的步骤:
1. 创建一个大小为n+1的布尔数组,所有元素初始值为true,表示所有数字都被认为是素数。
2. 从2开始,对于每个未被标记的数字i(即数组中的true),将其所有倍数标记为非素数(即数组中的false)。这些倍数包括i的2倍、3倍、4倍,直到n。
3. 遍历完成后,数组中值为true的索引对应的数字就是素数。
在这个例子中,给出了2~200范围内的筛选取法过程,可以看到,首先2、3是素数,接着将2的倍数(4、6、8...)标记为非素数,然后是3(5、9...),以此类推。最终,数组中未被0替换的数字代表它们是素数。
C++作为一种强大的编程语言,不仅支持基本的数据类型和控制结构,还拥有丰富的库函数和模板机制,使得实现这个算法变得简单。在C++中,我们可以使用标准模板库(STL)中的容器,如vector,来存储和处理数据。此外,C++11引入的范围基础的for循环(range-based for loop)使得遍历数组或容器更加简洁。
下面是一个简单的C++实现筛选取法求素数的代码示例:
```cpp
#include <iostream>
#include <vector>
void sieveOfEratosthenes(int n) {
std::vector<bool> primes(n + 1, true);
primes[0] = primes[1] = false;
for (int p = 2; p * p <= n; ++p) {
if (primes[p]) {
for (int i = p * p; i <= n; i += p)
primes[i] = false;
}
}
for (int p = 2; p <= n; ++p) {
if (primes[p])
std::cout << p << " ";
}
}
int main() {
int limit = 200;
sieveOfEratosthenes(limit);
return 0;
}
```
这段代码首先初始化了一个大小为n+1的bool向量,然后按照筛选取法的规则进行遍历和标记。最后,输出向量中值为true的索引,即为2~200范围内的所有素数。
C++语言的灵活性和高效性使其成为实现各种算法的理想选择,而筛选取法作为解决特定问题的算法,展示了编程中逻辑思维和问题解决能力的重要性。通过学习和掌握C++以及类似筛选取法的算法,开发者可以更好地理解和编写高效、可维护的代码。
2020-04-24 上传
2012-10-09 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
辰可爱啊
- 粉丝: 18
- 资源: 2万+
最新资源
- 逻辑分析仪使用手册特备版
- C语言测试-想成为嵌入式程序员应知道的0x10个基本问题.doc
- ASP考试系统理论指导
- PSoC的动态配置能力及其实现方法
- java面试题集(100题)
- 马潮老师AVR新书《AVR单片机嵌入式系统原理与应用实践》.
- 程序员面试好东西 JAVA
- AIX 逻辑卷管理
- 在Linux世界驰骋系列之Shell编程
- 直流电源及数显电路的设计
- OSWorkflow中文手册.pdf
- OSWorkflow开发指南.pdf
- Webwork2 开发指南.pdf
- Bootloader+Source+Code+Modification+Guide.pdf
- Hibernate开发指南.pdf
- 华为编程规范——规范你的程序设计