当前位置: 首页 > news >正文

C++ 素数的筛选法与穷举法

题目:素数大酬宾:

【问题描述】 某商场的仓库中有 n 种商品,每件商品按 1~n 依次编号。现在商场经理突发奇想,决定将编号为素数(质数)的所有商品拿出来搞优惠酬宾活动。请编程帮助仓库管理员将编号为素数的商品选出来。

【输入格式】 一行一个正整数 n,表示有 n 种商品,2≤n≤100000。

【输出格式】 一行若干个正整数,表示若干种商品编号且每个编号均为素数,请从小到大输出,每两个数之间有一个空格。

【输入样例】 20

【输出样例】 2 3 5 7 11 13 17 19

1、穷举法

穷举商品编号 2~n,判断每个编号是否为素数。这种方法效率不高,一旦 n 过大,程序就会超时。

#include<iostream>
#include<cmath>
using namespace std;
int main(){int n,i,j; bool flag;cin >> n;cout << 2;for(i = 3; i <= n; i++){flag = true;for(j = 2; j <= sqrt(i); j++)if(i % j == 0){flag = false;break;}if(flag) cout <<  " " << i;}cout << endl;return 0;
}

2、筛选法

筛选法的思路:

划去1‌:因为1不是素数。

圈出2‌:2是素数,留下2,划去2的倍数。

圈出3‌:3是素数,留下3,划去3的倍数。

圈出5‌:5是素数,留下5,划去5的倍数。

圈出7‌:7是素数,留下7,划去7的倍数。

重复上述步骤‌:继续用下一个未被划去的数作为除数,划去其倍数,直到没有更多的数可以划去为止。

#include<iostream>
#include<cmath>
using namespace std;
int main(){int n,i,j;bool p[100001];for(i = 0; i <= 100000; i++) p[i] = true;p[1] = false;cin >> n;cout << 2;  // 输出素数2// 思路:第一轮筛选2以及删除掉2的倍数;第二轮筛选3以及3的倍数...for(i = 2; i <= sqrt(n); i++)  if(p[i])  for(j = 2; i*j <= n; j++) p[i*j] = false;// 输出质数3包括3之后的素数for(i = 3; i <= n; i++)  if(p[i]) cout <<  " "<< i; cout << endl;return 0;
}

http://www.lryc.cn/news/461701.html

相关文章:

  • Spring Boot异步任务、任务调度与异步请求线程池的使用及原理
  • Java爬虫之使用Selenium WebDriver 爬取数据
  • MyBatis 中updateByPrimaryKey和updateByPrimaryKeySelective区别
  • JavaScript下载文件(简单模式、跨域问题、文件压缩)
  • Django 定义使用模型,并添加数据
  • 联名物料常泄漏?一端叠满“安全buff”
  • Flutter UI组件库(JUI)
  • 国外电商系统开发-运维系统远程文件
  • 4. Node.js Path模块
  • 重构长方法之分解条件表达式
  • 蚁群算法养老服务人员智能调度系统
  • java使用 IDEA自动补全功能 AI 插件
  • 【ShuQiHere】 AI与自我意识:能否创造真正的自觉机器人?
  • 【Linux 从基础到进阶】CPU性能调优与监控
  • Centos基线自动化检查脚本
  • OpenCV答题卡识别
  • 通用数据库对象设计
  • Java基础12-特殊文件和日志技术
  • 2.4 STM32启动过程
  • rm: cannot remove: Device or resource busy 解决方案
  • 2024年的5款AI写作工具,你用过几个?
  • 泛癌热门靶点TROP2及研究工具试剂
  • 2848. 与车相交的点
  • 第1节 入门
  • 四数之和(medium)08
  • TypeScript中 interface接口 type关键字 enum枚举类型
  • vue3.2实现AES加密解密,秘钥通过API获取,并混淆秘钥,后端thinkphp
  • 简述微服务高可用之Sentinel、Seate
  • 将爱传递 将“服务好”延伸
  • 基于MinIO配置bucket,用于文件下载和浏览