python使用筛法找100以内的素数

news2025/1/14 8:53:15

以下是使用 埃拉托色尼筛法 找出 100 以内所有素数的 Python 实现代码:

def sieve_of_eratosthenes(n):
    # 创建一个布尔列表,初始值为True
    is_prime = [True] * (n + 1)
    is_prime[0] = is_prime[1] = False  # 0 和 1 不是素数

    # 从2开始标记其倍数为非素数
    for i in range(2, int(n**0.5) + 1):
        if is_prime[i]:
            # 将i的倍数标记为非素数
            for j in range(i * i, n + 1, i):
                is_prime[j] = False

    # 返回所有素数
    return [x for x in range(n + 1) if is_prime[x]]


# 找出100以内的所有素数
primes = sieve_of_eratosthenes(100)
print("100以内的素数:", primes)

输出结果

运行上面的代码后,你将得到以下输出:

100以内的素数: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

代码说明

  1. 布尔列表 is_prime:用来标记每个数字是否为素数,初始值为 True
  2. 标记非素数:从 2 开始,将所有 i 的倍数标记为 False
  3. 优化:从 i^2 开始标记,因为比 i 小的倍数在之前已经被标记过。
  4. 结果生成:遍历布尔列表,返回所有值为 True 的索引。

这种算法在范围较大的情况下也非常高效。

埃拉托色尼筛法的时间复杂度和空间复杂度分析

时间复杂度
  1. 对于每个素数 ( p ),我们将从 ( p^2 ) 开始,标记它的所有倍数为非素数。
  2. 标记的次数可以用以下公式估算:
    [
    \text{总操作次数} = n \left( \frac{1}{2} + \frac{1}{3} + \frac{1}{5} + \dots \right)
    ]
    这里的分母是素数的倒数。这个和可以近似为:
    [
    n \times (\text{自然对数ln}(\ln(n)))
    ]
    所以,埃拉托色尼筛法的 时间复杂度为 ( O(n \log(\log(n))) )。
空间复杂度
  1. 主体的数据结构是一个布尔数组,大小为 ( n+1 )。
  2. 因此,埃拉托色尼筛法的 空间复杂度为 ( O(n) )。

总结

  • 时间复杂度:( O(n \log(\log(n))) )
  • 空间复杂度:( O(n) )

对于范围较大的素数筛选,这种方法在效率和空间占用上具有很好的平衡。

将埃拉托色尼筛法与传统的遍历算法(检查每个数是否是素数)对比,可以从 时间复杂度空间复杂度 两个角度分析:


传统遍历算法

算法步骤

  1. 遍历从 ( 2 ) 到 ( n ) 的所有数。
  2. 对于每个数 ( x ),判断是否能被小于等于 ( \sqrt{x} ) 的数整除。
  3. 如果 ( x ) 不能被任何数整除,则它是素数。
时间复杂度
  1. 判断一个数是否是素数需要最多 ( O(\sqrt{n}) ) 的时间。
  2. 遍历 ( n ) 个数,因此总时间复杂度为:
    [
    O(n \sqrt{n})
    ]
    对比埃拉托色尼筛法 ( O(n \log(\log(n))) ),传统遍历算法的效率低得多。
空间复杂度
  1. 传统遍历算法只需常量空间来存储当前数和可能的因子,因此空间复杂度为:
    [
    O(1)
    ]
    这比埃拉托色尼筛法 ( O(n) ) 更节省空间。

埃拉托色尼筛法

时间复杂度
[
O(n \log(\log(n)))
]
埃拉托色尼筛法通过一次性标记非素数,避免了重复判断,因此对于大范围的素数查找更高效。

空间复杂度
[
O(n)
]
需要一个布尔数组来存储每个数是否为素数。


对比总结

算法时间复杂度空间复杂度优缺点
传统遍历算法( O(n \sqrt{n}) )( O(1) )适用于小范围的素数判断,空间占用小,但时间复杂度高,效率低。
埃拉托色尼筛法( O(n \log(\log(n))) )( O(n) )适用于大范围的素数查找,时间复杂度低,效率高,但需要额外的存储空间。

适用场景

  1. 小范围素数查找:传统遍历算法简单易实现且节省空间,更适合。
  2. 大范围素数查找:埃拉托色尼筛法效率更高,适用于需要高效计算的大规模素数问题。

直观对比(100 以内的素数)

  • 传统遍历算法
    • 每个数从 ( 2 ) 遍历到其 ( \sqrt{x} ),重复计算较多。
  • 埃拉托色尼筛法
    • 一次性标记非素数,避免重复判断,提高效率。

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

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

相关文章

3D目标检测数据集——kitti数据集

KITTI官网网址:The KITTI Vision Benchmark Suite 下载数据集:The KITTI Vision Benchmark Suite KITTI数据集论文:CMSY9 github可视化代码:GitHub - kuixu/kitti_object_vis: KITTI Object Visualization (Birdview, Volumetric …

AI大模型赋能!移远通信打造具有“超能力”的AI智能玩具解决方案

随着无线通信、先进算法以及AI大模型等前沿技术的蓬勃发展,许多玩具已经从简单的互动设备进化为集教育、陪伴和娱乐功能于一身的AI智能玩具,在儿童群体中日渐风靡。不仅如此,因其能提供满满的情绪价值,在成年人和老年人市场中也展…

LED灯按键调光芯片、PWM调光IC、发光灯控制调光芯片

按键调光芯片,特别是LED灯使用PWM调光的芯片IC,是一种用于控制LED灯具亮度的集成电路,常用于台灯、壁灯、吊灯等照明设备中。这种芯片通过脉冲宽度调制(PWM)技术来调节LED的亮度,可以实现从最亮到最暗的平滑…

【专题】2025年节日营销趋势洞察报告汇总PDF洞察(附原数据表)

原文链接: https://tecdat.cn/?p38813 在当今复杂多变且竞争激烈的消费市场环境下,节日营销已成为企业获取市场份额、提升品牌影响力的关键战略时机。我们深知深入洞察节日营销趋势对于企业决策的重要性。 本报告汇总基于对 2024 年多个关键消费节点及…

what?ngify 比 axios 更好用,更强大?

文章目录 前言一、什么是ngify?二、npm安装三、发起请求3.1 获取 JSON 数据3.2 获取其他类型的数据3.3 改变服务器状态3.4 设置 URL 参数3.5 设置请求标头3.6 与服务器响应事件交互3.7 接收原始进度事件3.8 处理请求失败3.9 Http Observables 四、更换 HTTP 请求实现…

前端练习题

图片&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>用户信息页面</title><style>body {font-family: Arial, sans-serif;margin: 20px;}.user-info {display: flex;align-it…

jupyter notebook练手项目:线性回归——学习时间与成绩的关系

线性回归——学习时间与学习成绩的关系 第1步&#xff1a;导入工具库 pandas——数据分析库&#xff0c;提供了数据结构&#xff08;如DataFrame和Series&#xff09;和数据操作方法&#xff0c;方便对数据集进行读取、清洗、转换等操作。 matplotlib——绘图库&#xff0c;p…

车载音频开发(二):对音频数据作音量调节

通过前一个章节打下的基础车载音频开发&#xff08;一&#xff09;&#xff1a;从看懂wav开始https://blog.csdn.net/Hellomino_/article/details/140873133?fromshareblogdetail&sharetypeblogdetail&sharerId140873133&sharereferPC&sharesourceHellomino_&…

项目开发实践——基于SpringBoot+Vue3实现的在线考试系统(五)

文章目录 一、学生管理模块功能实现1、添加学生功能实现1.1 页面设计1.2 前端功能实现1.3 后端功能实现1.4 效果展示2、学生管理功能实现2.1 页面设计2.2 前端功能实现2.3 后端功能实现2.3.1 后端查询接口实现2.3.2 后端编辑接口实现2.3.3 后端删除接口实现2.4 效果展示二、代码…

【Rust】数据类型

目录 思维导图 1. 数据类型概述 1.1 标量类型 1.1.1 整数类型 1.1.2 浮点数类型 1.1.3 布尔类型 1.1.4 字符类型 1.2 复合类型 1.2.1 元组类型 1.2.2 数组类型 2. 类型注解与类型推断 3. 整数溢出处理 4. 数字运算 5. 示例 思维导图 1. 数据类型概述 Rust是一种静…

Matlab一些使用技巧

代码分段 两个百分号就可以实现代码的分段&#xff0c;不同段之间会以不同的背景色显示&#xff0c;方便调试 如下&#xff1a; %% 腐蚀 stlen TimeWidth*Fs/50; %线性算子的长度&#xff0c;1/100的脉宽&#xff0c;对应0.5us&#xff0c;15个采样点 stlen 100; SE strel…

【Linux系统】权限位(mode bits)

这张图是使用结构体 struct stat 中的 st_mode 字段时画的&#xff0c;获取表示文件的类型和权限&#xff0c;它是典型的 POSIX 系统调用&#xff08;如 stat() 和 fstat()&#xff09;返回的 struct stat 结构的一部分&#xff0c;用于描述文件的元数据。 在 Linux 和 Unix 系…

快速上手 INFINI Console 的 TopN 指标功能

背景 在分布式搜索引擎系统&#xff08;如 Easysearch、Elasticsearch 和 OpenSearch&#xff09;中&#xff0c;性能监控至关重要。为了确保系统的高效运行和资源的合理分配&#xff0c;我们通常需要关注一段时间内关键资源的使用情况&#xff0c;特别是索引、节点和分片的内…

LIEF:用于解析和修改 ELF, PE 和MachO 格式的跨平台库

主要功能 1. 解析&#xff1a;LIEF能够解析ELF、PE和MachO格式&#xff0c;并给用户提供了友好的API来访问文件格式内部数据。 2. 修改&#xff1a;LIEF能够修改上述格式的部分数据。 3. 抽象&#xff1a;这些格式拥有一些常见特征&#xff0c;例如数据段、符号和入口…

验证码的设置

一、准备环境 首先&#xff0c;进入下载地址&#xff1a;Central Repository: cn/hutool/hutool-all/5.8.16下载jar包 二、配置环境 将下载好的jar包放到eclipse的lib目录 (这里是eclipse软件中存放jar包的目录)&#xff1a; 【WebContent-->WEB-INF-->lib】 三、基础…

FreeCAD集成gmsh源码分析

目录 gmsh模块界面获取gmsh的版本执行gmsh网格划分gmsh模块界面 这个界面是用PySide来写的,Pyside是QT的python绑定,具体代码在task_mesh_gmsh.py文件中。目前这个界面非常的捡漏,没有对接gmsh稍微高级一点的功能。界面对应的事件处理是在gmshtools.py中。这里只分析“gmsh …

忘记了PDF文件的密码,怎么办?

PDF文件可以加密&#xff0c;大家都不陌生&#xff0c;并且大家应该也都知道PDF文件有两种密码&#xff0c;一个打开密码、一个限制编辑密码&#xff0c;因为PDF文件设置了密码&#xff0c;那么打开、编辑PDF文件就会受到限制。忘记了PDF密码该如何解密&#xff1f; PDF和offi…

怎么开通电信跨国网络专线服务?

随着全球化的发展&#xff0c;企业对高效稳定的跨国网络连接需求不断增长。电信跨国网络专线服务凭借其灵活性、安全性和高效性&#xff0c;成为许多企业跨国通信的优选方案。本文将为您详细介绍如何开通这一服务&#xff0c;并分享关键的注意事项&#xff0c;帮助企业更好地利…

MarkDown常用方法

标题 #空格 一级标题 ##空格 二级标题 依次类推 有序列表 操作&#xff1a;数字英文小数点(.)空格示例&#xff1a;1. list12. list2无序列表 操作&#xff1a;- 空格 或 * 空格示例&#xff1a; - list1- list2嵌套有序列表 操作&#xff1a;tab 数字 空格 示例&#xff1a; …

使用gtsam添加OrientedPlane3Factor平面约束因子

在基于地面约束的SLAM优化中&#xff0c;已知的地面信息&#xff08;如 plan.pcd 文件中的地面模型&#xff09;可以用作一个先验约束&#xff0c;以帮助优化位姿估计。具体而言&#xff0c;这个过程涉及将地面模型和每个帧的位姿结合&#xff0c;以创建一个因子模型&#xff0…