C++谭浩强课件:筛选法实现2~200范围内素数查找
需积分: 12 194 浏览量
更新于2024-08-23
收藏 8.72MB PPT 举报
在C++谭浩强编著的教材中,有一章节专门讲解如何使用筛选法求解2到200之间的所有素数。筛选法是一种高效查找素数的方法,其基本原理是先将给定范围内的所有数初始化为素数(1通常被排除在外),然后从最小的素数(2)开始,依次标记其倍数为非素数。具体步骤如下:
1. 初始化一个大小为n+1的布尔数组,其中索引表示数值,初始状态下所有元素都标记为素数(true)。
2. 从2开始,遍历数组,对于每个素数i,找到它的平方小于等于n的所有倍数,将这些倍数对应的数组元素置为false。例如,当i=2时,将所有偶数(除2本身外)标记为非素数;接着是i=3,将所有3的倍数(除3外)标记;以此类推,直到i*i > n。
3. 遍历完成后,数组中仍然标记为true的元素即为素数。筛选法的优势在于,随着i的增长,其倍数的标记会覆盖掉之前未被标记的素数,从而避免重复检查。
4. 在给定的示例中,可以看到数组的迭代过程:从2开始,2的倍数被标记为0,然后是3,5,7,…,依此类推。最终输出的数组中,非零的元素就是2到200之间的素数,如2、3、5、7、11、13、17、19等。
C++代码实现这个筛选法可能会这样设计:
```cpp
#include <iostream>
#include <vector>
bool isPrime(int n) {
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;
}
int main() {
const int limit = 200;
std::vector<bool> primes(limit + 1, true);
primes[0] = primes[1] = false;
for (int i = 2; i * i <= limit; i++) {
if (primes[i]) {
for (int j = i * i; j <= limit; j += i) {
primes[j] = false;
}
}
}
for (int i = 2; i <= limit; i++) {
if (primes[i]) {
std::cout << i << " ";
}
}
return 0;
}
```
这段代码首先创建了一个布尔向量`primes`,然后利用内层循环根据已知素数i更新其倍数为非素数。最后,输出非零元素,即为2到200之间的所有素数。通过这种方法,我们可以高效地找出给定范围内的素数。
2020-04-24 上传
2012-10-09 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
白宇翰
- 粉丝: 30
- 资源: 2万+
最新资源
- Python中快速友好的MessagePack序列化库msgspec
- 大学生社团管理系统设计与实现
- 基于Netbeans和JavaFX的宿舍管理系统开发与实践
- NodeJS打造Discord机器人:kazzcord功能全解析
- 小学教学与管理一体化:校务管理系统v***
- AppDeploy neXtGen:无需代理的Windows AD集成软件自动分发
- 基于SSM和JSP技术的网上商城系统开发
- 探索ANOIRA16的GitHub托管测试网站之路
- 语音性别识别:机器学习模型的精确度提升策略
- 利用MATLAB代码让古董486电脑焕发新生
- Erlang VM上的分布式生命游戏实现与Elixir设计
- 一键下载管理 - Go to Downloads-crx插件
- Java SSM框架开发的客户关系管理系统
- 使用SQL数据库和Django开发应用程序指南
- Spring Security实战指南:详细示例与应用
- Quarkus项目测试展示柜:Cucumber与FitNesse实践