《算法笔记》系列----质数的判断(埃氏筛法)

目录

一、朴素算法

二、埃氏筛法

1、与朴素算法对比

2、算法介绍    

3、例题即代码实现


一、朴素算法

  从素数的定义中可以知道,一个整数n要被判断为素数,需要判断n是否能被2.3.n- 1中的一个整除。只2,3..n- 1都不能整除n,n才能判定为素数,而只要有一个能整除n的数出现,n就可以判定为非素数。
        这样的判定方法没有问题,复杂度为0(n)。但是在很多题目中,判定素数只是整个算法
中的一部分,这时候0(n)的复杂度实际上有点大,需要更加快速的判定方法。注意到如果在
2 ~n-1中存在n的约数,不妨设为k,即n%k=0,那么由k*(n/k)=n可知,n/k也是n的一个约数,且k与n/k中一定满足其中一个小于等于sqrt(n)、另一个大于等于sqrt(n)其中sqr(n)为根号n。这启发我们,只需要判定n能否被2, 3,.. sqrt(n)中的一个整除(具中x表示对x向下取整),即可判定n县否为素数。这样的话时间复杂度就位o( sqrt(n))

代码如下:

bool isprime(int x){for(int i=2;i*i<=x;i++){if(x%i==0){return false;}}return true;
}

这里有个东西要注意:c++中sqrt函数是对double类型的函数,但是在实际代码中传进来的一般是一个int类型的数,因此我们在使用时要像下面这样让x乘上一个1.0

int main(){int x;cin>>x;ifprime(sqrt(1.0*x));}

二、埃氏筛法

1、与朴素算法对比

      上面这个算法在判断一个数是否是素数时时间复杂度优越,但是如果我们这个题目需要得到在这个数范围内所有的素数(素数表)时这个时间复杂度就偏大,即o(nsqrt(n))

2、算法介绍    

      因此我们要隆重引入我们新的算法埃氏筛法:

当需要生成一个给定范围内所有素数的素数表时,可以采用更高效的算法来降低时间复杂度。一种常见的方法是使用埃拉托斯特尼筛法(Sieve of Eratosthenes)

        埃氏筛法的时间复杂度O(nlog(log(n))),明显优于逐个判断每个数是否为素数的O(nsqrt(n)​)复杂度。

埃拉托斯特尼筛法的基本思想是从2开始,依次将每个素数的倍数标记为非素数,直到遍历完整个范围。剩下未被标记的数即为素数。

整理步骤如下:

  1. 初始化一个布尔数组,表示每个数是否为素数,初始值为True。
  2. 从2开始遍历到n​,对于每个素数p,将其倍数p×k(其中k>1)标记为非素数。
  3. 遍历完整个范围后,未被标记的数即为素数。

这种方法在生成素数表时能够显著减少时间复杂度,是常用的高效算法之一。

3、例题即代码实现

链接-晴问算法:https://sunnywhy.com/sfbj/5/4/205

完整ac代码:

 

#include<bits/stdc++.h>
using namespace std;
int main(){int n;cin>>n;vector<bool> isprime(n+1,true);for(int i=2;i<=n;i++){if(isprime[i]){for(int j=i+i;j<=n;j+=i){isprime[j]=false;}cout<<i<<endl;}}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/780942.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于el-table实现行内增删改

实现效果&#xff1a; 核心代码&#xff1a; <el-table :data"items"style"width: 100%;margin-top: 16px"border:key"randomKey"><el-table-column label"计划名称"property"name"><template slot-scope&q…

Learning To Count Everything

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 摘要Abstract文献阅读&#xff1a;学习数一切东西1、研究背景2、提出方法3、模块详细3.1、多尺度特征提取模块3.2、密度预测模块 4、损失函数5、性能对比6、贡献 二…

城管智慧执法系统源码,基于微服务+java+springboot+vue开发

城管智慧执法系统源码&#xff0c;基于微服务javaspringbootvue开发 城管智慧执法系统源码有演示&#xff0c;自主研发&#xff0c;功能完善&#xff0c;正版授权&#xff0c;可商用上项目。 一套数字化的城管综合执法办案系统源码&#xff0c;提供了案件在线办理、当事人信用…

Platypus 一种集中式的央行数字货币方案

集中式的CBDC&#xff0c;混合使用账户模型和UTXO模型。 角色分类 中央银行&#xff1a;发行货币&#xff0c;交易验证&#xff0c;公开交易日志&#xff0c;防止双花。 不是完全受信任的&#xff0c;假定为会遵守监管要求&#xff0c;但可能会破坏交易隐私&#xff0c;即获…

正弦实时数据库(SinRTDB)的使用(9)-有损压缩

前文已经将正弦实时数据库的使用进行了介绍&#xff0c;需要了解的可以先看下面的博客&#xff1a; 正弦实时数据库(SinRTDB)的安装 正弦实时数据库(SinRTDB)的使用(1)-使用数据发生器写入数据 正弦实时数据库(SinRTDB)的使用(2)-接入OPC DA的数据 正弦实时数据库(SinRTDB)…

MES系统怎么解决车间生产调度难的问题?

MES系统三个层次 1、MES决定了生产什么&#xff0c;何时生产&#xff0c;也就是说它使公司保证按照订单规定日期交付准确的产品&#xff1b; 2、MES决定谁通过什么方式&#xff08;流程&#xff09;生产&#xff0c;即通过优化资源配置&#xff0c;最有效运用资源&#xff1b; …

关于SVG格式图片实现室内地图

SVG格式图片 可缩放矢量图形(Scalable Vector Graphics,SVG)基于 XML 标记语言,用于描述二维的矢量图形。 作为一个基于文本的开放网络标准,SVG 能够优雅而简洁地渲染不同大小的图形,并和 CSS、DOM、JavaScript 和 SMIL 等其他网络标准无缝衔接。本质上,SVG 相对于图像…

C++多线程:线程的创建、join、detach、joinable方法(二)

1、线程的开始与结束 程序运行起来&#xff0c;生成一个进程&#xff0c;该进程所持有的主线程开始自动运行&#xff0c;main主线程运行完所有的代码从main函数中返回表示整个进程运行完毕&#xff0c;标志着主线程和进程的死亡&#xff0c;等待操作系统回收资源&#xff0c;因…

Cocos Creator 常见问题记录

目录 问题1、精灵图九宫格&#xff0c;角度不拉伸 问题2、BlockInputEvents 防止透屏 问题1、精灵图九宫格&#xff0c;角度不拉伸 点击编辑&#xff0c;拖拽到可变区域 问题2、BlockInputEvents 防止透屏

【独立开发前线】Vol.26 【独立开发产品】吉光卡片-让你的文字变得酷炫起来

今天给大家分享一下 独立开发前线 社区成员张小吉 的作品 吉光卡片&#xff1b; 这是一款iOS的APP&#xff0c;下载&#xff1a;吉光卡片&#xff0c;主要功能是帮你制作酷炫的文字卡片&#xff0c;用精美的卡片让你的文字生动起来。 展示效果如下&#xff1a; 你可以用它制作…

【公示】2023年度青岛市级科技企业孵化器拟认定名单

根据《青岛市科技企业孵化器管理办法》&#xff08;青科规〔2023〕1号&#xff09;&#xff08;以下简称《管理办法》&#xff09;、《关于开展2023年度市级科技企业孵化器认定申报工作的通知》&#xff0c;经申报受理、区市推荐、形式审查、专家评审及现场核查等程序&#xff…

【笔记】动⼿学深度学习(花书)|| Aston Zhang Mu Li Zachary C. LiptonAlexander J. Smola

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 前言 第一章 深度学习简介 第二章 P 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 系列文章目录前言本书…

BasicVSR++模型转JIT并用c++libtorch推理

BasicVSR模型转JIT并用clibtorch推理 文章目录 BasicVSR模型转JIT并用clibtorch推理安装BasicVSR 环境1.下载源码2. 新建一个conda环境3. 安装pytorch4. 安装 mim 和 mmcv-full5. 安装 mmedit6. 下载模型文件7. 测试一下能否正常运行 转换为JIT模型用c libtorch推理效果 安装Ba…

malloc是如何分配内存|malloc(1)分配多大内存|free释放内存,会还给操作系统吗?

前言 大家好&#xff0c; 我jiantaoyab&#xff0c;这篇文章给大家介绍mallo和free面试中常问到的问题。 malloc是如何分配内存的&#xff1f; 如果用户分配的内存小于128KB&#xff0c;则通过brk()申请内存 如果用户分配的内存大于128KB&#xff0c;则通过mmap()申请内存 简…

数据分析之POWER Piovt的KPI设置

内容总结&#xff1a; 1.两个表格关联不上&#xff1a;需要添加辅助列&#xff0c;建立关联 2.添加辅助列后还关联不上&#xff1a;将虚线变为实线 3.根据需求要增加一些度量值 4.设置KPI后&#xff0c;绝对值选1后设定百分比 5.在透视表里面加入KPI状态 导入所关联的数据后建立…

游戏领域AI智能视频剪辑解决方案

游戏行业作为文化创意产业的重要组成部分&#xff0c;其发展和创新速度令人瞩目。然而&#xff0c;随着游戏内容的日益丰富和直播文化的兴起&#xff0c;传统的视频剪辑方式已难以满足玩家和观众日益增长的需求。美摄科技&#xff0c;凭借其在AI智能视频剪辑领域的深厚积累和创…

SQLBolt,一个练习SQL的宝藏网站

知乎上有人问学SQL有什么好的网站&#xff0c;这可太多了。 我之前学习SQL买了本SQL学习指南&#xff0c;把语法从头到尾看了个遍&#xff0c;但仅仅是心里有数的程度&#xff0c;后来进公司大量的写代码跑数&#xff0c;才算真真摸透了SQL&#xff0c;知道怎么调优才能最大化…

SpringBoot登录校验(三)

​​​​​​​SpringBoot 登录认证&#xff08;一&#xff09;-CSDN博客 SpringBoot 登录认证&#xff08;二&#xff09;-CSDN博客 SpringBoot登录校验&#xff08;三&#xff09;-CSDN博客 前面我们介绍了传统的会话跟踪技术cookie和sesstion&#xff0c;本节讲解令牌技术…

Ubuntu20.04LTS+uhd3.15+gnuradio3.8.1源码编译及安装

文章目录 前言一、卸载本地 gnuradio二、安装 UHD 驱动三、编译及安装 gnuradio四、验证 前言 本地 Ubuntu 环境的 gnuradio 是按照官方指导使用 ppa 的方式安装 uhd 和 gnuradio 的&#xff0c;也是最方便的方法&#xff0c;但是存在着一个问题&#xff0c;就是我无法修改底层…

HarmonyOS实战开发-如何实现一个简单的电子相册应用开发

介绍 本篇Codelab介绍了如何实现一个简单的电子相册应用的开发&#xff0c;主要功能包括&#xff1a; 实现首页顶部的轮播效果。实现页面跳转时共享元素的转场动画效果。实现通过手势控制图片的放大、缩小、左右滑动查看细节等效果。 相关概念 Swiper&#xff1a;滑块视图容…