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

每天一道LeetCode-----计算小于n的素数个数 Count Primes 原题链接Count Primes 计算小于n的素数个数 思路: 如果一个数m是素数,那么所有m * k就都不是素数。另外2是最小的素数 代码如下 class Solution { public: int countPrimes(int n) { vector<int> nums(n 1); int c... 阅读详情

题目: 

        输入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 = 2
    sqrt_n = int(n ** 0.5) + 1
    is_prime = [True] * (sqrt_n + 1)
    p = 2
    while (p * p <= sqrt_n):
        if is_prime[p]:
            for i in range(p * p, sqrt_n + 1, p):
                is_prime[i] = False
        p += 1
    is_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] = False
    prime_count = sum(is_prime_in_range)
    return prime_count


if __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)

baostock实战:如何用Python批量下载多只股票的历史数据(含常见错误排查) 本文详细介绍了如何使用Python和baostock库批量下载多只股票的历史数据。内容涵盖从环境搭建、代码标准化到构建稳健的批量下载框架的全过程,并重点提供了高级错误处理、网络重试、数据验证及内存管理等实战解决方案,帮助用户高效构建股票数据处理流水线。 阅读详情

相关推荐

龙头复盘神器/复盘于导出工具最新版5.6

龙头复盘神器,复盘于导出工具

初入python踩过的坑 8224

吉比特_笔试_区间内素数个数

import java.util.Scanner; /** 输入M、N,1 < M < N < 1000000,求区间[M,N]内的所有素数的个数。素数定义:除了1以外,只能被1和自己整除的自然数称为素数 输入描述: 两个整数M,N 输出描述: 区间内素数的个数 示例1 输入 2 10 输出 4 * @author zhaoz ...

weixin_34203832的博客 188

使用FileZilla在武汉大学IGS数据分析中心下载GNSS数据

2.依次点击如下图标下载到本地并解压安装(按系统选择要下载的版本)

qq_43381998的博客 6038

求区间素数的埃拉托斯特尼筛法

题目描述 输入M、N,1 < M < N < 1000000,求区间[M,N]内的所有素数的个数。素数定义:除了1以外,只能被1和自己整除的自然数称为素数 输入描述: 两个整数M,N 输出描述: 区间内素数的个数 使用埃拉托斯特尼筛法 基本思想:素数的倍数一定不是素数 实现方法:用一个长度为N+1的数组保存信息(0表示素数,1表示非素数),先假设所有的数都是素数(初始化为0),...

zfnice的博客 785

RK-XCKU5P RoCEv2 传感器桥工程分析报告

烧入后这块 FPGA 就是一个固定身份(CA:FE:C0:FF:EE:00 / 192.168.0.2 / 无 FEC 100G)的RoCEv2 UC 端点,每秒在 UDP 12267 广播自报家门;对端 CX5 只要关 FEC、配 192.168.0.101 +MTU 4200,就能 ping 通它、用 UDP 8192 读写它的全部寄存器、再按"ECB 旁路交换 QPN/rkey"的方式建立 UC RDMA 通道收发数据。

eloudy的专栏 243

【模型解读】【代码复现】Segment Anything Model(SAM)

Meta AI的一个新的人工智能模型,只需一次点击就能 "分割出 "任何图像中的任何物体! SAM是一个可提示的分割系统,对不熟悉的物体和图像具有zero-shot的概括性,并且不需要额外的训练。

lalula的博客 2万+

python-leetcode-求区间[M,N]内的所有素数的个数

题目描述 输入M、N,1 < M < N < 1000000,求区间[M,N]内的所有素数的个数。素数定义:除了1以外,只能被1和自己整除的自然数称为素数 输入描述: 两个整数M,N 输出描述: 区间内素数的个数 解法一:常规解法 def prime(m, n): prime_list = [] for i in range(m, n): fo...

Mr_WoLong 1万+

二手分析仪器改造实战:如何用PMT搭建荧光检测电路(附完整电路图)

本文详细介绍了如何利用二手分析仪器中的光电倍增管(PMT)核心部件,进行荧光检测电路的实战改造。内容涵盖从PMT工作原理理解、高压供电电路设计、低噪声前置放大(跨阻放大器)到信号调理的完整流程,并提供了关键电路图与调试排错指南,旨在帮助电子爱好者与工程师低成本构建稳定、高灵敏度的专业检测系统。

weixin_29234239的博客 440

python面试-简单的手写代码

好久之前的面试题目了,整理电脑文件碰巧看到以前的留档,整理一下 斐波那契数列指的是这样一个数列:0,1,1,2,3,5,8,13,21,34,。。。 这个数列从第3项开始,每一项都等于前两项之和。请实现一个方法,输入N,返回为该长度的斐波那契数列的数组。 def fibo(n): a,b=0,1 aws=[] for i in range(n): aws.append(a) a,b=b,a+b return aws n=int(input

等风来 830

【GEE实战指南】Python本地API配置避坑与一站式环境搭建

本文详细介绍了Google Earth Engine(GEE)Python本地API的配置避坑指南与一站式环境搭建流程。通过conda创建隔离环境、账户认证关键步骤、初始化代码的正确写法以及实战测试案例,帮助开发者快速掌握GEE Python API的配置技巧,避免常见错误,提升地理空间数据分析效率。

weixin_42624889的博客 186

c语言播放背景音乐

相信很多童鞋都在为大学课设而伤透头脑,而背景音乐的使用无疑会成为其中的一个亮点(总比没有好吧(╯▽╰)),故接下来我将介绍一下如何用C播放音乐。我用的编译器是CodeBlocks16.01接下来新建一个C文件建立完后是这样滴然后添加其中mciSendString()函数是由&lt;mmsystem.h&gt;库提供的供播放音乐(MP3)的函数第一个参数是歌曲所在的绝对路径 打开音乐所在位置 复制这...

qq_41443987的博客 3万+

试除法求素数

试除法求素数

2302_80190394的博客 720

AUTOSAR进阶图解==>AUTOSAR_SWS_ADCDriver

本文深入解析了AUTOSAR ADC Driver的架构设计和技术实现。主要内容包括:1)ADC Driver在AUTOSAR分层架构中的定位及核心功能;2)详细的模块架构设计,涵盖初始化管理、组转换管理、优先级处理等核心子组件;3)全面的配置模型说明,包括主配置类、通用配置、通道配置等关键数据结构;4)状态机机制和操作序列分析。通过分层设计和标准化接口,ADC Driver实现了硬件抽象和软件解耦,提供了良好的可移植性和可维护性。

一名留德华的,康德的信徒的,专注于汽车电子领域的博客 786

剑指 Offer 15. 二进制中1的个数 - 力扣(LeetCode)

剑指 Offer 15. 二进制中1的个数 - 力扣(LeetCode)

Onwaier的博客 493

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

算法小白的进阶之路(力扣9~12)

算法小白的进阶之路(力扣9~12)

大学生小郑的博客 1793

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

排序题目:区间和的个数

计算两个升序子数组之间的区间和的个数与合并两个升序子数组的时间复杂度相同,计算区间和的个数并没有提升总时间复杂度,总时间复杂度和原始归并排序一样是。前缀和为数组的前缀子数组的元素和,数组的每个下标对应一个前缀和,根据前缀和可以快速得到任意一个子数组的元素和。前缀和为数组的前缀子数组的元素和,数组的每个下标对应一个前缀和,根据前缀和可以快速得到任意一个子数组的元素和。对两个子数组分别排序并计算区间和的个数,得到两个升序的子数组和两个子数组分别包含的区间和的个数。创建线段树,用于存储列表中的每个元素的名次。

stormsunshine的博客 1189

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

输出n到m之间所有素数的个数和所有的素数_客户端基本不用的算法系列:素数筛法...

今天的内容实用而且简单!素数问题是从来都是数学家热衷探索的领域,也是程序设计竞赛和 LC 中,解决数论相关问题的基础,下面本文介绍如何更科学地筛素数和一些相关的小知识。首先从定义来说, 素数,指整数在一个大于 1 的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。 那么首先我们可以根据定义来写出我们的最暴力求解素数的程序。暴力统计素数假设有 n 个数,我们的方法很简单,判断每个...

weixin_39962758的博客 713

每日一题——力扣——前n个数字二进制中1的个数

题目来源于力扣——剑指 Offer II 003. 前 n 个数字二进制中 1 的个数 - 力扣(LeetCode) (leetcode-cn.com) 给定一个非负整数 n ,请计算 0 到 n 之间的每个数字的二进制表示中 1 的个数,并输出一个数组。 示例 1: 输入: n = 2 输出: [0,1,1] 解释: 0 --> 0 1 --> 1 2 --> 10 示例2: 输入: n = 5 输出: [0,1,1,2,1,2] 解释: 0 --> 0 1 -...

爱编程的晖哥的博客 460

leetcode--求区间内的元素个数

数轴上有n个点,对于任一闭区间 [a, b],试计算落在其内的点数。输入第一行包括两个整数:点的总数n,查询的次数m。第二行包含n个数,为各个点的坐标。以下m行,各包含两个整数:查询区间的左、右边界a和b。输出对每次查询,输出落在闭区间[a, b]内点的个数。输入样例5 2 1 3 7 9 11 4 6 7 12 输出样例0 3限制0 ≤ n, m ≤ 5×105对于次查询的区间[a,

哆啦A梦的博客 3493

leetcode-3405 统计恰好有k个相等相邻数组的个数

本文探讨了构造满足特定条件的数组个数问题。首先通过动态规划方法递推关系式dp(n,k)=dp(n-1,k-1)+dp(n-1,k)*(m-1),随后优化为空间复杂度O(k)的滚动数组解法。针对大数情况,改用组合数计算方法,利用费马小定理和快速幂预处理阶乘及其逆元,最终通过公式C(n-1,k)m(m-1)^(n-k-1)%MOD求解。该方法有效解决了n、m、k值较大时的计算效率问题

xhhgffd的博客 4505

LeetCode 1474. 删除链表 M 个节点之后的 N 个节点

文章目录1. 题目2. 解题 1. 题目 给定链表 head 和两个整数 m 和 n. 遍历该链表并按照如下方式删除节点: 开始时以头节点作为当前节点. 保留以当前节点开始的前 m 个节点. 删除接下来的 n 个节点. 重复步骤 2 和 3, 直到到达链表结尾. 在删除了指定结点之后, 返回修改过后的链表的头节点. 进阶问题: 你能通过就地修改链表的方式解决这个问题吗? 示例 1: 输入: head = [1,2,3,4,5,6,7,8,9,10,11,12,13], m = 2, n = 3 输出: [

Michael是个半路程序员 3622

求解素数算法(leetcode有感而发)

总结了一些常见的判定素数和计算某个范围内素数个数的一些算法。 1 简单判断素数算法 根据定义,判断一个整数n是否是素数,只需要去判断在整数区间[2, n-1]之内,是否具有某个数m,使得n % m == 0。 int isPrime(int n) { int i; for (i = 2; i < n; ++i) { if (n % i == 0) return 0; } return 1; } 事实上,这个算法是O(n)的,感觉是很快了,但是有一个算法是O(sqrt(n))的算法。代码如

zou_albert的博客 925

每日一练——从长度为n的数组里选出m个数使和为固定值sum

这个问题是我从leetcode上一道问题所想到的,原题:如果是从数组中选出2个数相加使之成为固定的数sum,这当然很简单,把数组中的数字遍历一遍,判断另一个数字是否也在数组中即可。代码如下。 vector twoSum(vector& nums, int target) { vector result; map cache;//第一个为数字,第二个为下标

千里之行,始于足下 2万+

leetcode 327.区间和的个数

leetcode 327.区间和的个数 题干 给定一个整数数组 nums,返回区间和在 [lower, upper] 之间的个数,包含 lower 和 upper。 区间和 S(i, j) 表示在 nums 中,位置从 i 到 j 的元素之和,包含 i 和 j (i ≤ j)。 说明: 最直观的算法复杂度是 O(n2) ,请在此基础上优化你的算法。 示例: 输入: nums = [-2,5,-1], lower = -2, upper = 2, 输出: 3 解释: 3个区间分别是: [0,0], [2,2]

玛软的垃圾桶 200

【LeetCode】位1的个数

【LeetCode】位1的个数 题目 Write a function that takes an unsigned integer and return the number of '1' bits it has (also known as the Hamming weight). Example 1: Input: 0000000000000000000000000000101...

Greenary的博客 277

【python|二分|leetcode441】一题搞清楚二分区间问题---闭区间、左闭右开、左开右闭、全开区间

一题搞清楚二分区间问题—闭区间、左闭右开、左开右闭、全开区间* <=是闭区间* < 开区间,具体哪种由mid的取值决定* m = (left + right)//2,向下取整,所以left能够取到,左闭右开 `[)`* m = (left + right + 1)//2, 向上取整,right能够取到,左开右闭 `(]`

胡侃有料的博客 1199
上一篇: 爬虫爬取数据时,如何解决由于验证码通常是动态生成的,直接通过URL下载可能会遇到验证码内容不一致的问题?( ̄︶ ̄)↗
下一篇: letcode:给定一个字符串,找到最长子字符串的长度,要求子字符串中所有字符不重复
-O-joker
博客等级 码龄5年 2977粉丝 108原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-O-joker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值