第3章 编程问题 3.2节 3
来源:互联网 发布:算法c语言实现完整 编辑:程序博客网 时间:2024/06/05 20:23
题目描述:
一个素数是一个大于1的整数,并且它的正因子只有1和它自身。希腊数学家埃拉托色尼开发的一个算法,埃拉托色尼筛法,可以寻找所有小于或等于某个给定的数n的素数——即,所有从2~n之间的素数。考虑从2~n的数的列表。2是第一个素数,但是2的倍数(4,6,8,…)不是,所以它们被从这个列表中划去。2之后第一个没有被划去的数是3,这是下一个素数。接着我们从列表中划去所有比3大的3的倍数(6,9,12,…)。下一个没有被划去的数是5,这又是下一个素数,我们划去所有比5大的5的倍数(10,15,20,…)。重复这个过程,直到我们到达列表中第一个其平方大于n但是又没有被划去的数。列表中剩余的数就是从2~n之间的素数。编写一个程序,使用这种筛法和一个数组找出从2~n之间的所有素数。对于n=550和n=5500,分别执行这个程序。
C++实现:
#include <iostream>#define CAPACITY 550 /*把这个数改成5500就能找出2~5500之间的素数*/using namespace std;void main() { /*利用布尔类型的数组,当primeNumber[i]的值是false时,代表i是素数,初始时默认数组中所有元素的值都为false——即都是素数,随着 程序运行,逐渐排除,若i不是素数,则将primeNumber[i]设为true */ bool primeNumber[CAPACITY + 1] = {0}; /*当数组容量为551时,数组的最大索引是550,这样不会导致索引越界*/ int index = 2; /*index从2开始,知道index的平方大于CAPACITY*/ while (index*index <= CAPACITY) { for (int i = index + index; i <= CAPACITY; i += index) { if (!primeNumber[i]) { primeNumber[i] = true; } } index++; } /*primeNumber[2]开始从遍历数组,当primeNumber[i]为false时,说明i是 素数,则输出i */ for (int i = 2; i <= CAPACITY; i++) { if (!primeNumber[i]) { cout << i << "\t"; } } system("pause");}
阅读全文
0 0
- 第3章 编程问题 3.2节 3
- 第3章 编程问题 3.2节 1
- 第3章 编程问题 3.2节 2
- 第3章 编程问题 3.2节 4
- 第2章 编程问题 2.2节 3
- 第3章 编程问题 3.3节 9
- 数据库编程第3章
- 第3章:RDD编程
- 第3章 IAR编程
- 第2章 编程问题 2.2节 1
- 【C++语言99个常见编程错误】第3章 预处理器问题
- 编程珠玑--第12章 取样问题
- 《编程珠玑》第12章:取样问题
- Python核心编程---读书笔记:第1章~第3章
- 《C++编程》第3章第6题
- 《C++编程》第3章第10题
- 《C++编程》第3章第14题
- 《c++编程》第3章第15题
- Gear VR Controller设备Button响应小例子
- Linux下搭建spark集群开发环境
- 如何修改CentOS7系统网卡名?
- ActivityThread.java
- android 拦截短信并自动输入
- 第3章 编程问题 3.2节 3
- MongoDB(四)——管理架构
- 数据库相关
- 小程序端JS加密,传输PHP端解密--微信小程序联盟
- Python3.6安装ConfigParse(配置解析模块)安装
- memcached spring中 的配置
- HTML5新增标签总结和说明
- 关于使用springmvc 上传文件
- iOS --- GCD 信号量控制并发 (dispatch_semaphore)