C++面向对象:筛选取法实现2~200间素数查找
需积分: 18 181 浏览量
更新于2024-08-24
收藏 8.65MB PPT 举报
本资源是一份关于C++面向对象编程的课件,主要关注如何使用筛选法求解2至200之间的所有素数。筛选法,又称埃拉托斯特尼筛法,是一种古老且高效的算法,用于找出一个范围内所有素数的方法。在这个示例中,程序首先创建一个数组,将1到200的所有数字初始化为1(因为最初都假设是素数)。然后,从2开始,依次将它的倍数标记为非素数,即置零。这个过程会重复,每次增加一个已知的素数,如3、5、7等,直到筛选出所有的素数。
具体步骤如下:
1. 首先,创建一个大小为200的数组,代表2到200的整数。
2. 从2开始,遍历数组,如果当前数i是素数(即未被标记为非素数),则执行以下操作:
- 将i的倍数(i * i到200)设为0,表示它们不是素数。
3. 当遍历到某个数的平方大于200时,筛选过程结束,因为之后的数无法再是2到200范围内的素数。
4. 最后,数组中未被标记为0的元素就是2到200之间的素数。
C++程序可能如下所示:
```cpp
#include <iostream>
#include <vector>
bool isPrime(int num) {
if (num <= 1) return false;
for (int i = 2; i * i <= num; i++) {
if (num % i == 0) return false;
}
return true;
}
void sieveOfEratosthenes(int n, std::vector<int>& primes) {
std::vector<bool> isComposite(n+1, true); // 假设所有数都是合数
for (int i = 2; i * i <= n; i++) {
if (isComposite[i]) {
for (int j = i * i; j <= n; j += i) {
isComposite[j] = false; // 如果i的倍数是合数,则标记为非素数
}
}
}
// 将素数添加到结果向量
for (int i = 2; i <= n; i++) {
if (isComposite[i]) primes.push_back(i);
}
}
int main() {
int limit = 200;
std::vector<int> primeNumbers;
sieveOfEratosthenes(limit, primeNumbers);
std::cout << "2到" << limit << "之间的素数有:";
for (const auto& prime : primeNumbers) {
std::cout << prime << " ";
}
return 0;
}
```
这段代码展示了如何在C++中实现筛选法来寻找素数,同时也体现了C++语言的优势,如简洁的语法、强大的数据处理能力和良好的可移植性。然而,正如课件所述,C++的语法结构相对宽松,对于初学者来说需要一定时间去理解和熟练运用,包括理解循环、条件语句以及调试技巧。同时,课件也提到了C++语言的发展历程,从BCPL到C再到C++,反映了计算机程序设计语言的不断演进和优化。
2020-04-24 上传
2012-10-09 上传
2014-11-10 上传
2024-10-26 上传
2023-05-30 上传
2023-08-13 上传
2023-11-13 上传
2023-11-20 上传
2023-05-25 上传
深夜冒泡
- 粉丝: 16
- 资源: 2万+
最新资源
- StarModAPI: StarMade 模组开发的Java API工具包
- PHP疫情上报管理系统开发与数据库实现详解
- 中秋节特献:明月祝福Flash动画素材
- Java GUI界面RPi-kee_Pilot:RPi-kee专用控制工具
- 电脑端APK信息提取工具APK Messenger功能介绍
- 探索矩阵连乘算法在C++中的应用
- Airflow教程:入门到工作流程创建
- MIP在Matlab中实现黑白图像处理的开源解决方案
- 图像切割感知分组框架:Matlab中的PG-framework实现
- 计算机科学中的经典算法与应用场景解析
- MiniZinc 编译器:高效解决离散优化问题
- MATLAB工具用于测量静态接触角的开源代码解析
- Python网络服务器项目合作指南
- 使用Matlab实现基础水族馆鱼类跟踪的代码解析
- vagga:基于Rust的用户空间容器化开发工具
- PPAP: 多语言支持的PHP邮政地址解析器项目