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

筛质数(暴力法、埃氏筛、欧拉筛)

筛质数(暴力法、埃氏筛、欧拉筛)

暴力法

思路分析:

直接双for循环来求解质数
如果不设置标记只是简单地执行了break会导致内部循环(由j控制)而不是立即打印i或者跳过它。如果打印语句写到内部循环中,也会导致每个
非素数也被打印出来多次(在找到其因子之前)。

code:

#include <iostream>
using namespace std;
int n;
int main() {cin >> n;for (int i = 2; i <= n; i++) { // 从2开始,因为1不是素数bool isprime = true; // 假设i是素数for (int j = 2; j * j <= i; j++) { // 只需要检查到sqrt(i),因为如果i有一个大于sqrt(i)的因子,那么它必然还有一个小于或等于sqrt(i)的因子if (i % j == 0) {isprime = false; // 如果找到一个因子,则i不是素数break;}}if (isprime) { // 如果i是素数,则打印它cout << i << " ";}}return 0;
}

埃氏筛

思路分析:

如果一个数是素数,那么它的倍数就不是素数

code:

#include <iostream>
using namespace std;
int main(){int p[100010]={1,1};//f[i]=1代表不是素数int n;cin>>n;for(int i=2;i<=n;i++){if(p[i]==1) continue;for(int j=2;i*j<=n;j++){p[i*j]=1;}}for(int i=1;i<=n;i++){if(p[i]==0){cout<<i<<' ';}}
}

欧拉筛

思路分析:

基本思想:确保每个数只被其除1以外的最小质因数标记。
实现:<需要一个数组把它存储起来,
逆向思考:从最大因数开始找到最小的质因数,
在处理一个数时,需要遍历所有已经找到的质数,并当该质数是当前数的因数时退出循环,这是因为对于更大的数,当前数已不再是其最大的因数,无需继续处理。>

code:

#include <iostream>
using namespace std;
int main(){int d=0;int p[10010]={0};int f[10010]={1,1};int n;cin>>n;for(int i=2;i<=n;i++){if(f[i]==0){//如果没有被标记过,那么i是质数p[d++]=i;//先运行后加}for(int j=0;j<d;j++){if(p[j]*i<=n){//标记以i为最大因数的数不是素数f[p[j]*i]=1;}else{break;}if(i%p[j]==0){//如果p[j]是i的因数,那么后面的数都不是以i为最大因数的break;}}}for(int i=0;i<d;i++){cout<<p[i]<<' ';}
}

如果 i 能够被 p[j] 整除(即 i % p[j] == 0),那么说明 p[j] 是 i 的一个因数。由于我们已经用 p[j] 标记了所有小于或等于n的 p[j] 的倍数,所以没有必要再用更大的质数去标记 i 的倍数。因此,可以跳出内层循环。

相关文章:

  • Redisson-Lock-加锁原理
  • 02--MySQL数据库概述
  • 自动化开发任务:在PHP框架中实现自定义命令
  • 微信小程序-伪类选择器
  • 【少儿编程Python:趣味编程,探索未来】第一章 启航编程之旅,开启智慧之门
  • 系统思考与创新解决
  • Django 条件判断模板标签
  • 【深度学习驱动流体力学】计算流体力学openfoam-paraview与python3交互
  • 动态创建接口地址
  • 探索Agent AI智能体的未来
  • Lua迭代器详解(附加红点功能实例)
  • Java学习 - 网络IP协议簇 讲解
  • css-vxe列表中ant进度条与百分比
  • RabbitMQ消息队列 安装及基本介绍
  • STM32项目分享:家庭环境监测系统
  • 【Linux系统编程】快速查找errno错误码信息
  • Android Studio:GIT提交项目到远程仓库
  • Javascript Math对象和Date对象常用方法详解
  • java中具有继承关系的类及其对象初始化顺序
  • Mysql5.6主从复制
  • 工作中总结前端开发流程--vue项目
  • 漂亮刷新控件-iOS
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 实战|智能家居行业移动应用性能分析
  • 微信小程序填坑清单
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • PostgreSQL之连接数修改
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • #mysql 8.0 踩坑日记
  • #QT项目实战(天气预报)
  • #WEB前端(HTML属性)
  • (2024,Vision-LSTM,ViL,xLSTM,ViT,ViM,双向扫描)xLSTM 作为通用视觉骨干
  • (2024最新)CentOS 7上在线安装MySQL 5.7|喂饭级教程
  • (6)设计一个TimeMap
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (超详细)语音信号处理之特征提取
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (规划)24届春招和25届暑假实习路线准备规划
  • (佳作)两轮平衡小车(原理图、PCB、程序源码、BOM等)
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • .NET Core 项目指定SDK版本
  • .net 怎么循环得到数组里的值_关于js数组
  • .net6使用Sejil可视化日志
  • .Net语言中的StringBuilder:入门到精通
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网
  • [20150321]索引空块的问题.txt
  • [AIGC] 深入浅出 Python中的`enumerate`函数
  • [Android Pro] android 混淆文件project.properties和proguard-project.txt
  • [BIZ] - 1.金融交易系统特点
  • [C++] 如何使用Visual Studio 2022 + QT6创建桌面应用