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

目录

一、朴素算法

二、埃氏筛法

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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

服务器被CC攻击之后怎么办?

1.取消域名绑定取消域名绑定后Web服务器的CPU能够马上恢复正常状态&#xff0c;通过IP进行访问连接一切正常。但是不足之处也很明显&#xff0c;取消或者更改域名对于别人的访问带来了不变&#xff0c;另外&#xff0c;对于针对IP的CC攻击它是无效的&#xff0c;就算更换域名攻…

HTTP 与 HTTPS 的区别

基本概念 HTTP&#xff08;HyperText Transfer Protocol&#xff1a;超文本传输协议&#xff09;是一种应用层协议&#xff0c;主要用于在网络上进行信息的传递&#xff0c;特别是用于Web浏览器和服务器之间的通信。 它使用明文方式发送数据&#xff0c;这意味着传输的内容可…

【生活】相机/图像各参数

文章目录 专业模式图片编辑-滤镜实体滤镜软件模拟滤镜 图片编辑-增强曝光亮度对比度饱和度自然饱和度色温色调高光阴影HSL色调分离褪色颗粒锐化晕影清晰度暗角 参考 专业模式 第一个参数WB是白平衡&#xff0c;调节色彩的。 第二个是对焦F&#xff0c;近距离拍摄物体&#xf…

macOS Ventura 13.6.6 (22G630) 正式版发布,ISO、IPSW、PKG 下载

macOS Ventura 13.6.6 (22G630) 正式版发布&#xff0c;ISO、IPSW、PKG 下载 3 月 26 日凌晨&#xff0c;macOS Sonoma 14.4.1 发布&#xff0c;同时带来了 macOS Ventru 13.6.6 安全更新。 macOS Ventura 13.6 及更新版本&#xff0c;如无特殊说明皆为安全更新&#xff0c;不…

电脑分辨率怎么调,电脑分辨率怎么调整

随着电脑的普及以及网络的发展&#xff0c;我们现在在工作中都离不开对电脑的使用&#xff0c;今天小编教大家设置电脑分辨率&#xff0c;现在我们先了解这个分辨率是什么?通常电脑的显示分辨率就是屏幕分辨率&#xff0c;显示屏大小固定时&#xff0c;显示分辨率越高图像越清…

关于深度学习的 PyTorch 项目如何上手分析?从什么地方切入?

文章目录 PyTorch 项目分析1.背景2.分析流程 PyTorch 项目分析 1.背景 当我们拿到一个 PyTorch 的深度学习项目时&#xff0c;应该怎么入手&#xff1f;怎么去查看代码&#xff1f; 2.分析流程 首先阅读对应项目的 README.md 文件。通过阅读 README.md &#xff0c;一般可以…

Oracle 19c 高可用部署实战系列之Data Guard理论与实战

课程介绍 Oracle Data Guard确保企业数据的高可用性、数据保护和灾难恢复。 Oracle Data Guard提供了一组全面的服务&#xff0c;用于创建、维护、管理和监视一个或多个备用数据库&#xff0c;使生产Oracle数据库能够在灾难和数据损坏中幸存下来。Oracle Data Guard将这些备用…

SpringBoot整合腾讯云邮件发送服务非STMP

SpringBoot整合腾讯云邮箱服务 1、pom配置 <!-- 腾讯云邮箱服务--><dependency><groupId>com.tencentcloudapi</groupId><artifactId>tencentcloud-sdk-java</artifactId><!-- go to https://search.maven.org/search?qtencen…

微服务demo(四)nacosfeigngateway

一、gateway使用&#xff1a; 1、集成方法 1.1、pom依赖&#xff1a; 建议&#xff1a;gateway模块的pom不要去继承父工程的pom&#xff0c;父工程的pom依赖太多&#xff0c;极大可能会导致运行报错&#xff0c;新建gateway子工程后&#xff0c;pom父类就采用默认的spring-b…

常用植被物候提取方法 (TIMESATE/R语言/Python)-3.0

文章内容仅用于自己知识学习和分享&#xff0c;如有侵权&#xff0c;还请联系并删除 &#xff1a;&#xff09; 常用植被物候提取方法 (TIMESATE/R语言/Python)-1.0见 link常用植被物候提取方法 (TIMESATE/R语言/Python)-2.0见 link 这里主要介绍一下自己读到的论文&#xff…

虚拟现实(VR)项目的开发工具

虚拟现实&#xff08;VR&#xff09;项目的开发涉及到多种工具&#xff0c;这些工具可以帮助开发者从建模、编程到最终内容的发布。以下是一些被广泛认可的VR开发工具&#xff0c;它们覆盖了从3D建模到交互设计等多个方面。北京木奇移动技术有限公司&#xff0c;专业的软件外包…

【目录整理】(五)

​​​​​Git 基础 Git 详细安装教程文章浏览阅读10w次&#xff0c;点赞9.6k次&#xff0c;收藏1.7w次。Git 是个免费的开源分布式版本控制系统&#xff0c;下载地址为git-scm.com 或者 gitforwindows.org&#xff0c;本文介绍 Git-2.40.0-64-bit.exe 版本的安装方法&#x…

华为云亮相KubeCon EU 2024,以持续开源创新开启智能时代

3月21日&#xff0c;在巴黎举办的云原生顶级峰会KubeCon EU 2024上 &#xff0c;华为云首席架构师顾炯炯在“Cloud Native x AI&#xff1a;以持续开源创新开启智能时代”的主题演讲中指出&#xff0c;云原生和AI技术的融合&#xff0c;是推动产业深刻变革的关键所在。华为云将…

租用2核4G云服务器优惠价格,阿里云腾讯云京东云报价

当前最新2核4G云服务器多少钱&#xff1f;165元一年&#xff0c;30元3个月。阿里云2核4G服务器165元一年&#xff0c;30元3个月、腾讯云2核4G5M服务器165元一年、京东云2核4G云主机126元1年&#xff0c;华为云也提供2核4G配置云服务器。阿腾云atengyun.com整理2024年最新云服务…

Servlet中的request和respons对象

当我们在地址栏中输入一长串的地址的时候进行访问的时候&#xff0c;服务器&#xff08;Tomcat&#xff09;会给我们生成衣个request对象和reponse. requset对象&#xff1a; 1.获取用户输入的信息进行登录验证 Java给我们提供的是HttpServletRequset接口&#xff0c;并没有…

电脑开机慢怎么办,电脑开机慢解决方法

新电脑呢&#xff0c;开机速度特别快。有很多人会感觉到电脑拿回家以后&#xff0c;一按开机键&#xff0c;六秒七秒&#xff0c;这个电脑就启动起来了&#xff0c;但是用一段时间以后呢&#xff0c;他会明显感觉到这个开机的速度呢&#xff0c;会特别慢&#xff0c;可能从六秒…

真机 ARM64 架构转模拟器 ARM64 架构

本文字数&#xff1a;2051字 预计阅读时间&#xff1a;15分钟 01 需要转换架构的原因 老版 Mac 使用 Intel 芯片&#xff0c;是x86_64架构&#xff0c;相应地在老版 Mac 上运行的模拟器使用的也就是 x86_64架构。 由于模拟器的 x86_64 架构与真机的 arm64、armv7 等架构不冲突&…

是德科技keysight 1169A探头放大器

181/2461/8938产品概述&#xff1a; Agilent Keysight 1169A InfiniiMax II 12 GHz 探测系统设计用于与 DSO91204A 和 DSO91304A Infiniium 示波器配合使用&#xff0c;提供高达 12 GHz 指定的实时带宽&#xff0c;并具有 13 GHz 典型性能。创新的 InfiniiMax 探测系统甚至可以…

双按键IP对讲终端SV-6002D功能简介

ip语音双向对讲系统高速路求助对讲终端 IP对讲终端SV-6002D双按键是一款采用了ARMDSP架构&#xff0c;接收网络音频流&#xff0c;实时解码播放&#xff1b;配置了麦克风输入和扬声器输出&#xff0c;SV-6002D带两路寻呼按键&#xff0c;可实现对讲、广播等功能&#xff0c;作为…

MacOS M1/M2/M3芯片如何安装Python3.6

前言 Mac电脑M芯片安装Python3.6报错。 一般情况下&#xff0c;Mac系统可以使用homebrew来管理安装软件。 brew search搜索发现&#xff0c;最低只能直接安装python3.7版本。 于是从Python官网下载安装包进行安装&#xff0c;确实也没有报错&#xff0c;安装完成后执行总是k…