C++面向对象:筛选取法实现2~200间素数查找
需积分: 16 137 浏览量
更新于2024-07-13
收藏 8.57MB PPT 举报
在C++面向对象程序设计中,"用筛选取法求出2~200之间的所有素数"是一个常见的编程练习,它涉及到基础算法和数据结构的运用。筛选法,也称为埃拉托斯特尼筛法(Sieve of Eratosthenes),是一种古老且高效的求解素数的方法。这种方法的基本思想是从最小的质数2开始,将其倍数标记为合数(非素数),然后移动到下一个未被标记的数(即下一个质数),重复此过程,直到处理完所有小于或等于目标范围的数。
以下是如何使用C++实现这个算法的步骤:
1. 定义一个大小为目标范围(例如200)加一的布尔型数组,初始时所有元素设为`true`,表示每个数都被假设为可能的素数。
2. 从2开始,遍历数组。对于每一个素数2,将它的所有倍数(2的倍数、4的倍数、6的倍数等)的数组元素设为`false`,因为它们不是素数。
3. 继续寻找下一个未被标记为`false`的元素,即下一个质数。找到后,再次遍历该数的倍数并标记为非素数。
4. 当遍历完整个数组,剩下的所有`true`值对应的数字就是2到指定范围内的素数。
以下是一个简单的C++代码示例:
```cpp
#include <iostream>
#include <vector>
bool isPrime(int n, std::vector<bool>& primes) {
if (n <= 1)
return false;
if (n == 2 || n == 3)
return true;
if (n % 2 == 0 || n % 3 == 0)
return false;
for (int i = 5; i * i <= n; i += 6) {
if (n % i == 0 || n % (i + 2) == 0)
return false;
}
return true;
}
void sieveOfEratosthenes(int n, std::vector<bool>& primes) {
primes.resize(n + 1, true);
primes[0] = primes[1] = false;
for (int i = 2; i * i <= n; ++i) {
if (primes[i]) {
for (int j = i * i; j <= n; j += i) {
primes[j] = false;
}
}
}
}
int main() {
int limit = 200;
std::vector<bool> primeArray(limit + 1, true);
sieveOfEratosthenes(limit, primeArray);
for (int i = 2; i <= limit; ++i) {
if (primeArray[i])
std::cout << i << " ";
}
return 0;
}
```
这段代码首先定义了一个`isPrime`函数,用于判断单个数是否为素数,然后在`sieveOfEratosthenes`函数中应用筛选法。在`main`函数中,我们创建一个布尔数组并调用筛选函数,最后打印出2到200之间的所有素数。
C++作为一种强大的编程语言,它在面向对象设计中提供了类和对象的概念,这使得代码更加模块化和易于维护。在实际编程中,我们可以将上述方法封装到一个名为`PrimeFinder`的类中,包含成员函数如`findPrimes`,这样更符合面向对象的设计原则。同时,C++的模板和STL库也可以帮助我们更好地处理各种规模的问题,提高代码的复用性和效率。学习这种筛选法并应用于C++编程,有助于理解基础算法和优化代码性能。
2009-10-29 上传
2024-05-08 上传
2022-09-14 上传
2023-05-30 上传
2023-08-13 上传
2023-11-13 上传
2023-06-12 上传
2023-04-26 上传
2023-11-20 上传
冀北老许
- 粉丝: 16
- 资源: 2万+
最新资源
- 前端面试必问:真实项目经验大揭秘
- 永磁同步电机二阶自抗扰神经网络控制技术与实践
- 基于HAL库的LoRa通讯与SHT30温湿度测量项目
- avaWeb-mast推荐系统开发实战指南
- 慧鱼SolidWorks零件模型库:设计与创新的强大工具
- MATLAB实现稀疏傅里叶变换(SFFT)代码及测试
- ChatGPT联网模式亮相,体验智能压缩技术.zip
- 掌握进程保护的HOOK API技术
- 基于.Net的日用品网站开发:设计、实现与分析
- MyBatis-Spring 1.3.2版本下载指南
- 开源全能媒体播放器:小戴媒体播放器2 5.1-3
- 华为eNSP参考文档:DHCP与VRP操作指南
- SpringMyBatis实现疫苗接种预约系统
- VHDL实现倒车雷达系统源码免费提供
- 掌握软件测评师考试要点:历年真题解析
- 轻松下载微信视频号内容的新工具介绍