leetcode:输入m,n(1 < m < n < 1000000),返回区间[m,n]内的所有素数的个数

题目: 

        输入m,n(1 < m < n < 1000000),返回区间[m,n]内的所有素数的个数。

题解:

        要计算区间 [m,n] 内的所有素数的个数,我们可以使用一种高效的素数判定方法,如“埃拉托斯特尼筛法”(Sieve of Eratosthenes)。然而,由于 m 和 n 的范围可能非常大(最大到 1000000),直接对 [1,n] 使用埃拉托斯特尼筛法可能不够高效。因此,我们可以对 [m,n] 进行一个局部筛选。

埃拉托斯特尼筛法:基本原理

        埃拉托斯特尼筛法的基本思想是通过标记合数来筛选素数。一个合数,必然可以表示成一个自然数i和一个素数的乘积。因此,找到一个素数后,可以将其小于n的倍数全部标记为合数。最终,未被标记的数即为素数。

        具体来说,要得到自然数n以内的全部素数,必须把不大于√n的所有素数的倍数剔除。这是因为一个合数一定可以分解为两个因数的乘积,其中至少有一个因数不大于其平方根。

埃拉托斯特尼筛法:算法步骤

  1. 初始化一个布尔数组is_prime,标记所有大于等于2且小于等于n的数为素数(即is_prime[i]初始化为True)。
  2. 从2开始,找到下一个未被标记为非素数的数p,将其标记为素数(即确认is_prime[p]为True)。
  3. 将该素数的倍数(除了该素数本身)标记为非素数(即将is_prime[p的倍数]设置为False)。
  4. 重复步骤2和步骤3,直到找不到更大的素数。
  5. 最终,未被标记为非素数的数即为素数。
def count_primes_in_range(m, n):if m < 2:m = 2sqrt_n = int(n ** 0.5) + 1is_prime = [True] * (sqrt_n + 1)p = 2while (p * p <= sqrt_n):if is_prime[p]:for i in range(p * p, sqrt_n + 1, p):is_prime[i] = Falsep += 1is_prime_in_range = [True] * (n - m + 1)for p in range(2, sqrt_n + 1):if is_prime[p]:start = max(p * p, (m + p - 1) // p * p)for j in range(start, n + 1, p):if j >= m:is_prime_in_range[j - m] = Falseprime_count = sum(is_prime_in_range)return prime_countif __name__ == '__main__':m = int(input("输入m(请确保1 < m < n < 1000000): "))n = int(input("输入n(请确保1 < m < n < 1000000): "))prime_count = count_primes_in_range(m, n)print(prime_count)

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

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

相关文章

将本地文件上传到GIT上

上传文件时&#xff0c;先新建一个空文件&#xff0c;进行本地库初始化&#xff0c;再进行远程库克隆&#xff0c;将要上传的文件放到克隆下来的文件夹里边&#xff0c;再进行后续操作 1.在本地创建文件夹&#xff0c;将要上传的文件放在该文件下 2.在该文件页面中打开Git Bas…

免登录H5快手商城系统/抖音小店商城全开源运营版本

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 最近因为直播需要然后在互站花500买了一套仿抖音的商城系统&#xff0c;感觉确实还可以&#xff0c;反正都买了所以就分享给有需要的人 以下是互站那边的网站介绍可以了看一下&#…

【路径规划】基于蚁群算法的飞行冲突解脱

摘要 飞行冲突解脱是空中交通管理中的重要问题&#xff0c;确保飞机之间安全的距离避免冲突尤为重要。本文提出了一种基于蚁群算法的飞行冲突解脱方法&#xff0c;通过优化飞行器的路径&#xff0c;实现冲突的有效解脱。蚁群算法是一种模拟蚂蚁觅食行为的启发式算法&#xff0…

大厂为什么要禁止使用数据库自增主键

大表为何不能用自增主键&#xff1f; 数据库自增主键&#xff0c;以mysql为例&#xff0c;设置表的ID列为自动递增&#xff0c;便可以在插入数据时&#xff0c;ID字段值自动从1开始自动增长&#xff0c;不需要人为干预。 在小公司&#xff0c;或者自己做项目时&#xff0c;设置…

爬虫基础--requests模块

1、requests模块的认识 requests模块的认识请跳转到 requests请求库使用_使用requests库-CSDN博客 2、爬取数据 这里我们以b站动漫追番人数为例。 首先进去b站官网 鼠标右键点击检查或者键盘的F12&#xff0c;进入开发者模式。&#xff08;这里我使用的是谷歌浏览器为例&#…

二分查找_ x 的平方根搜索插入位置山脉数组的峰顶索引

x 的平方根 在0~X中肯定有数的平方大于X&#xff0c;这是肯定的。我们需要从中找出一个数的平方最接近X且不大于X。0~X递增&#xff0c;它们的平方也是递增的&#xff0c;这样我们就可以用二分查找。 我们找出的数的平方是<或者恰好X&#xff0c;所以把0~X的平方分为<X …

Elasticsearch是做什么的?

初识elasticsearch 官方网站&#xff1a;Elasticsearch&#xff1a;官方分布式搜索和分析引擎 | Elastic Elasticsearch是做什么的&#xff1f; Elasticsearch 是一个分布式搜索和分析引擎&#xff0c;专门用于处理大规模数据的实时搜索、分析和存储。它基于 Apache Lucene …

文言文编程,没错,尤雨溪都点赞了

文言文编程&#xff0c;没错&#xff0c;尤雨溪都点赞了 在现代编程语言百花齐放的今天&#xff0c;居然有人选择用古典汉语来写代码&#xff1f;这就是文言编程语言 Wenyan-lang&#xff0c;一种让你在写代码时&#xff0c;仿佛重回古代&#xff0c;挥毫泼墨般潇洒。本文将带你…

Ubuntu22.04安装RTX3080

Ubuntu22.04安装RTX3080 1 安装基础环境 更新依赖包 sudo apt-get update sudo apt-get upgrade2 安装驱动 &#xff08;1&#xff09;查看适合的显卡驱动 # 查看可用的驱动 sudo ubuntu-drivers devices# 返回值&#xff0c;推荐版本&#xff1a;nvidia-driver-550 ERROR…

提升C#异步性能:如何正确使用ConfigureAwait(false)避免上下文捕获

前言 在C#开发中&#xff0c;异步编程非常普遍&#xff0c;async/await模式极大地简化了异步任务的编写。然而&#xff0c;随之而来的是一些隐蔽的性能和上下文切换问题。在某些情况下&#xff0c;默认的上下文捕获行为可能会导致性能损耗&#xff0c;特别是在UI应用中&#x…

步骤详解:弹性公网ipv6如何申请?

弹性公网ipv6如何申请&#xff1f;申请弹性公网IPv6的步骤包括&#xff1a;首先登录私有网络控制台&#xff0c;选择弹性网卡并进入实例详情页。在IPv6地址管理标签页中分配IPv6地址&#xff0c;然后通过操作栏下的按钮释放或调整IPv6地址的公网访问能力。最后&#xff0c;配置…

python之爬取豆瓣排行与可视化

找到目标网址&#xff1a; url "https://movie.douban.com/chart" 豆瓣电影排行榜 鼠标右键&#xff0c;检查 复制url,与user-agent: url "https://movie.douban.com/chart" headers {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Wi…

SQL进阶技巧:如何找出开会时间有重叠的会议室?| 时间区间重叠问题

目录 0 场景描述 1 数据准备 2 问题分析 方法1:利用 lateral view posexplode()函数将表展开成时间明细表 方法2:利用数学区间讨论思想求解 3 小结 0 场景描述 有7个会议室,每个会议室每天都有人开会,某一天的开会时间如下: 查询出开会时间有重叠的是哪几个会议室?…

算法专题七: 分治归并

目录 1. 排序数组2. 交易逆序对的总数3. 计算右侧小于当前元素的个数4. 翻转对 1. 排序数组 算法思路: 本道题使用归并的思路进行排序, 先讲数组分为左右两个区间, 然后合并两个有序数组. class Solution {vector<int> tmp; public:vector<int> sortArray(vector&…

sentinel原理源码分析系列(五)-构建调用链路

上节分析构建插槽链&#xff0c;Sentinel的资源调用好比一个个连续的检查口&#xff0c;能否通过&#xff0c;使用检查规则和统计指标&#xff0c;本章开始分析插槽&#xff0c;首先分析构建调用链路的两个插槽 构建调用链路 构建调用链路为指标统计搭建好结构&#xff0c;调…

文件误删并清空回收站:全面解析与高效恢复策略

一、文件误删并清空回收站的遭遇 在日常使用电脑或移动设备的过程中&#xff0c;我们难免会遇到一些令人懊恼的数据丢失问题&#xff0c;其中文件误删并清空回收站便是最为常见的一种。当你不小心删除了某个重要文件&#xff0c;并且随后又毫不留情地清空了回收站&#xff0c;…

双十一母婴必买清单 推荐超实用母婴用品

随着双十一购物狂欢节的临近&#xff0c;无数准父母和年轻家长开始摩拳擦掌&#xff0c;准备为家中的小宝贝抢购一系列高品质、实用的母婴用品。在这个年度最大的电商促销活动中&#xff0c;选择对的产品不仅能够节省开支&#xff0c;更能确保宝宝的健康成长与舒适生活。以下是…

【C++ STL 模板类】pair 键值对

文章目录 【 1. pair 对象的创建 】【 2. pair 对象的赋值 】【 3. pair 对象的比较 】【 4. pair对象成员的互换】 C STL 标准库提供了 pair 类模板&#xff0c;专门用来将 2 个普通元素 first 和 second&#xff08;可以是 C 基本数据类型、结构体、类自定的类型&#xff09;…

中安未来 OCR:开启高效身份证件识别新时代

在数字化快速发展的今天&#xff0c;高效准确地处理各类信息变得至关重要。中安未来 OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;技术以其卓越的性能和广泛的应用场景&#xff0c;成为了众多企业和机构的得力助手。其中&#xff0c;身份…

480p 720p 1080p 2k 4k 8k 12k分辨率视频分别占用多大带宽?

技术背景 好多开发者&#xff0c;在设置视频编码参数的时候&#xff0c;对不同分辨率的带宽设置&#xff0c;缺乏相关的经验&#xff0c;实际上&#xff0c;视频分辨率与所需带宽之间的关系受到多个因素的影响&#xff0c;包括视频编码方式、帧率、视频内容的动态程度等。下面…