当前位置: 首页 > news >正文

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.mrgr.cn/news/56880.html

相关文章:

  • 机器学习2
  • 毕业生找工作的攻略:从校园到职场的成功之路
  • 实用的 Python 小脚本
  • 2024软件测试面试秘籍(含答案+文档)
  • 简单汇编教程10 数组
  • python开发“猫狗大战”游戏
  • 在Maple中创建交互式应用程序
  • Maven 不同环境灵活构建
  • Kotlin学习第一课
  • 通过滑动控制 图片3d(多张视频序列帧图片) 展示
  • linux调用exit函数退出进程,变跟的文件内容会立即同步到磁盘吗
  • 人大金仓下载,有人知道怎么解决吗
  • 如何在本地运行threejs官方示例
  • 模组典型上网业务的AT上网流程,明明白白告诉你!
  • 26备战秋招day11——基于CoNLL-2003的bert序列标注
  • pikachu靶场File Inclusion-local测试报告
  • Python爬取京东商品信息,详细讲解,手把手教学(附源码)
  • visio图片三维旋转后导出,格式错乱怎么解决?
  • 解锁团队高效秘诀:5款顶尖PHP任务管理工具推荐
  • 视频转换为8K60帧率
  • opencv - py_photo - py_non_local_means 非局部均值去噪
  • YOLO11改进-模块-引入分层互补注意力混合器HRAMi
  • AI大模型会对我们的生活带来什么改变?普通人终于有机会感觉到大模型的用处了
  • 网址工具(完善中)
  • ssh scp提示Bad configuration option: GSSAPIKexAlgorithms
  • Nodejs上传阿里云oss图片案例