【LeetCode】204.计数质数

news2024/11/25 23:37:54

204.计数质数(中等)

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

思路

埃拉托斯特斯筛法(简称埃氏筛法),适用于「判断一个整数是否是质数」,该方法可以在判断一个整数 n 时,同时判断所有小于 n 的整数。

从 1 到 n 进行遍历,假设当前遍历的数字为 m,则把所有小于 n 、且是 m 的倍数的整数标记为合数;遍历完成后,没有被标记的数字就是质数。

代码

class Solution {
public:
    int countPrimes(int n) {
        if(n <= 1)  return 0;
        int ans = n - 2; // 1 不是质数,小于n,所以n也不能计入
        vector<bool> prime(n, true); // 是否是质数
        for(int i=2; i<n; ++i){
            if(prime[i]){
                // 考虑i的倍数
                for(int j=2*i; j<n; j+=i){
                    if(prime[j]){
                        // j 是 i 的倍数,因此不是质数
                        prime[j] = false;
                        --ans;
                    }
                }
            }
        }
        return ans;
    }
};

优化

显然,这个算法过于繁琐,有些数字我们很容易就能确定它不是质数,比如偶数一定不是质数,一开始就可以将它们排除。

此外,最小的质因数一定小于被开方数,基于这两个理论,我们可以对算法进行优化。

  • 为什么从x2 开始?

    因为计算 i2 之前就计算了 i * 2i * 3 , … , i*(i-1)

    假如我们要判断9是不是质数。如果它不是质数,一定有两个数相乘等于它。这两个因数一定有一个因数小于等于根号9。也就是3。

    那么反过来,我们已经把比3小的数的所有的倍数都排除了。

    那么对于3到9之间的数,比如7, 如果不是质数,它的一个因子应该是小于3。但是小于3的数的所有倍数都被我们排除了。所以当我们验证到3的倍数的时候,最小的倍数就是3的平方。

代码

class Solution {
public:
    int countPrimes(int n) {
        if(n <= 2)  return 0;
        int ans = n/2; // 排除偶数
        vector<bool> prime(n, true); // 是否是质数
        int i = 3, sqrtn = sqrt(n);
        // 最小质因数一定小于等于开方数
        while(i <= sqrtn){
            for(int j=i*i; j<n; j+=2*i){ // 避免偶数和重复遍历
                if(prime[j]){
                    --ans;
                    prime[j] = false;
                }
            }
            do{
                i += 2;
            }while(i <= sqrtn && !prime[i]); // 避免偶数和重复遍历
        }
        return ans;
    }
};

参考资料

  1. 埃氏筛的动图展示

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

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

相关文章

内网渗透之权限维持-域控后门-SSPHOOKDSRMSIDSkeleton-Key

权限维持-基于验证DLL加载-SSP 方法一:但如果域控制器重启&#xff0c;被注入内存的伪造的SSP将会丢失。 mimikatz privilege::debug misc::memsspC:\Windows\System32\mimilsa.log 记录登录的账号密码 方法二:使用此方法即使系统重启&#xff0c;也不会影响到持久化的效果…

Plus and Multiply

题目&#xff1a; 题意解析&#xff1a; 有一个无穷大的正整数集合 S&#xff0c;该集合按下面所述方法生成&#xff1a; 数字 1 在集合 S 中。 若数字 x 在该集合中&#xff0c;那么数 xa 和数 xb 均在集合 S 中。&#xff08;其中 a 与 b 为给定常数&#xff09; 现在给出…

快速创作攻略:10分钟让你实现从文章撰写到多平台发布,支持公众号、B站、微博、知乎、头条等20种

快速创作攻略&#xff1a;10分钟让你实现从文章撰写到多平台发布&#xff0c;支持公众号、B站、微博、知乎、头条等20种 很多文字内容创作者&#xff0c; 想分享一个idea&#xff0c; 想介绍一个工具&#xff0c; 想分享经验或知识。 常碰到以下难题&#xff1a; 有个灵感但是要…

神经网络的基本概念、架构和训练方法

神经网络是一种由多个神经元按照一定的拓扑结构相互连接而成的计算模型。其灵感来自于人类大脑中神经元之间的相互作用。 在过去的几十年里&#xff0c;神经网络一直是人工智能领域中的热门研究方向之一。随着深度学习的兴起&#xff0c;神经网络的应用越来越广泛。本文将详细…

目标检测经典论文精读-R-CNN

目标检测经典论文精读-R-CNN R-CNN基本原理产生候选框-Selective Search 论文链接&#xff1a; https://www.cv-foundation.org/openaccess/content_cvpr_2014/papers/Girshick_Rich_Feature_Hierarchies_2014_CVPR_paper.pdf 论文技术报告链接&#xff1a; https://arxiv.org/…

无热图不组学!高阶文献热图R语言绘制小专场拿捏

一、概述 近在阅读近五年的一区高分的机器学习文献&#xff0c;其中有一种图出现频率特别高——热图。《Machine Learning and the Future of Cardiovascular Care: JACC State-of-the-Art Review》 《Comparison of Machine Learning Methods for Predicting Outcomes After…

阿里云服务器可以干嘛?ChatGPT等12件小事

拥有一台阿里云服务器可以用来做什么&#xff1f;ChatGPT最近很火&#xff0c;可以在云服务器上部署本地ChatGPT&#xff0c;搭建个人博客、企业网站&#xff0c;学习Linux、跑Python爬虫等&#xff0c;阿里云服务器网分享使用阿里云服务器用途的12件小事&#xff1a; 阿里云服…

cda星型模式、星座模式和雪花模式是什么鬼,怎么记

一、星型模式、雪花模式、星座模式的英文 星型模式 star schema 雪花模式 snowflake schema 二、形象记忆三种模式 星型模式&#xff0c;就像海绵宝宝里面的派大星&#xff0c;它长了多只手&#xff0c;每只手都抓着一个人。注意&#xff01;只有一个派大星&#xff08;只有…

高精度_加减乘除(理论+模板+例题)

&#x1f442; Rush E (Impossible Version) - Sheet Music Boss - 单曲 - 网易云音乐 &#x1f442; My Favorite Things - 羊毛とおはな - 单曲 - 网易云音乐 目录 &#x1f33c;前言 &#x1f33c;理论 &#x1f33c;理论结合题目 &#x1f3c6;1088: 大整数加法 &am…

Android Jetpack之Room数据库的使用(Kotlin+Room)

作者&#xff1a;舒呐 一、基本介绍 Room 持久性库在 SQLite 上提供了一个抽象层&#xff0c;以便在充分利用 SQLite 的强大功能的同时&#xff0c;能够流畅地访问数据库。具体来说&#xff0c;Room 具有以下优势&#xff1a; 针对 SQL 查询的编译时验证。可最大限度减少重复…

django ORM框架(操作数据库)

一、ORM框架介绍 ORM框架&#xff0c;把类和数据进行映射&#xff0c;通过类和对象操作它对应表格中的数据&#xff0c;进行增删改查&#xff08;CRUD) ORM框架中 数据库&#xff1a;需要提前手动创建数据库 数据表&#xff1a;与OMR框架中的模型类对应 字段&#xff1a;模…

阿里云,又瘫了!

大家好&#xff0c;我是老杨。 不知道你对前段时间&#xff0c;阿里云瘫痪的事情有印象不&#xff1f; 12月18号&#xff0c;阿里云发生了大规模服务中断的事情——主要是阿里云香港Region可用区C发生大规模服务中断事件。 中断也不是第一次了&#xff0c;但引起我注意的是&…

面向对象技术

面向对象技术 面向对象基础 面向对象基本概念 面向对象分析 面向对线设计 面向对象测试 UML 事务 关系 图 设计模式 创建型设计模式 结构型设计模式 行为型设计模式 面向对象基本概念 面向对象基本概念 达成目标具体需要做哪些事情。 对象 : 基本的运行实体,为类的实…

Vector - CAPL - CANoe硬件配置函数 - 05

目录 resetCan -- 重置CAN控制器 代码示例 ResetCanEx -- 重置CAN控制器的特定CAN通道 代码示例 ScanBaudrateActive -- 特定通道设置波特率 ScanBaudratePassive -- 开始扫描并检测给定通道上的波特率 resetCan -- 重置CAN控制器 功能&#xff1a;重置CAN控制器&#xf…

(2020)End-to-end Neural Coreference Resolution论文笔记

2020End-to-end Neural Coreference Resolution论文笔记 Abstract1 Introduction2 Related Work3 Task4 Model4.1 Scoring Architecture4.2 Span Representations5 Inference6 Learning7 Experiments7.1 HyperparametersWord representationsHidden dimensionsFeature encoding…

学习HCIP的day.06

十一、OSFP扩展知识点 1、关于OSPF状态机的问题 &#xff08;1&#xff09;在MA网络中&#xff08;要进行DR/BDR选举&#xff09;存在7种状态机&#xff0c;init是路由器A收到邻居B的hello包&#xff0c;但该hello包中没有A的RID&#xff1b; &#xff08;2&#xff09;在点到…

汽车EEA架构演进以及域控制器发展介绍

1、重要名词解析 &#xff08;1&#xff09;SDV&#xff1a;软件定义汽车&#xff1b; &#xff08;2&#xff09;SOA &#xff1a;一种 C/S 架构的软件设计方法&#xff1b; &#xff08;3&#xff09;OTA&#xff1a;空中下载技术&#xff08;Over-the-Air Technology&#x…

【MySql】数据库事务

事务 事务事务的操作事务并发处理可能出现的问题隔离级别MVCC&#xff1a;多版本并发控制 事务 事物本质上指一条 sql 语句或一组 sql 组合 事务的特性&#xff1a;ACID 1、原子性&#xff1a;一个事务&#xff0c;要么一次性完成&#xff0c;要么就不做 2、一致性&#xff1…

STM32驱动超声波+OLED显示,并上传数据到云端(ONENET)

本文将介绍如何使用STM32F103C8T6单片机和HC-SR04超声波测距模块来实现测距功能&#xff0c;并通过0.96寸OLED屏幕显示测距结果。 首先&#xff0c;我们需要了解一下HC-SR04超声波测距模块的工作原理。该模块通过发送超声波脉冲并接收回波信号的时间来计算物体与模块之间的距离…

C++ STL 标准模板库介绍与入门

目录 1、概述 1.1、C 标准库 1.2、Boost库 2、STL 版本 2.1、HP 原始版本 2.2、P. J. 实现版本 2.3、RW 实现版本 2.4、SGI 实现版本 2.5、STLport 实现版本 3、STL 的六大组件 3.1、STL 六大组件构成 3.2、六大组件的交互关系 4、STL 的重要性 5、总结 VC常用功…