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

Python 质数筛选:从入门到优化的 5 种方法

质数(Prime Number)是指只能被 1 和自身整除的自然数,如 2、3、5、7 等。在算法题、密码学或数学计算中,高效生成质数至关重要。

Python 提供了多种方法来实现质数筛选,但不同方法的效率差异巨大。本文从 最基础的方法 开始,逐步介绍 优化技巧,最终给出 最优解,让你彻底掌握质数计算的精髓。

一、方法 1:最基础的暴力解法(适合新手)

遍历 2 到 n-1,检查是否能被整除。

def is_prime(n):
    if n <= 1:
        return False
    for i in range(2, n):
        if n % i == 0:
            return False
    return True

primes = [n for n in range(1, 1000) if is_prime(n)]
print(primes)

问题:效率低,时间复杂度 高,仅适用于小范围数据。

二、方法 2:优化暴力法(减少计算量)

定义优化后的函数,跳过偶数(除了 2),提升计算速度。

def is_prime_optimized(n):
    if n <= 1:
        return False
    if n == 2:
        return True
    if n % 2 == 0:
        return False
    for i in range(3, int(n ** 0.5) + 1, 2):  # 只检查奇数
        if n % i == 0:
            return False
    return True

primes = [n for n in range(1, 1000) if is_prime_optimized(n)]
print(primes)

优点:比方法 1 快很多,至少排除了一半的数

三、方法 3:列表推导式法(简洁法)

这种方法代码简洁,思路清晰,同时不用使用其它的函数

nums = range(1, 1000)
primes = [num for num in nums if all(num % x != 0 for x in range(2, num))]
print(primes)

四、方法 4: filter法(思路清晰法)

定义一个过滤的函数is_prime(),然后用filter进行过滤,转化为列表后,打印出来。

nums = range(1, 1000)
def is_prime(num):
    for x in range(2, num):
        if (num % x) == 0:
            return False
    return True
primes = list(filter(is_prime, nums))
print(primes)

五、方法 5:filter + lambda(代码优化法)

把方法四中的函数转化为lambd函数,条件用and来连接起来,三行代码就可以实现。

nums = range(1, 1000)
primes = list(filter(lambda num: num > 1 and all(num % x != 0 for x in range(2, num), nums))
print(primes)

六、学后总结

利用Python的内置函数如filter、lambda可以减少代码冗余,提升运行速度。

处理序列时要结合filter,列表推导式,lambda匿名函数来改进算法,提升运行效率。

推荐第三种和第四种方法,思路清晰,易于理解。

相关文章:

  • RPA VS AI Agent
  • 如何解决线程安全问题(不涉及分布式情况)
  • MTCNN 人脸识别
  • 对于GAI虚假信息对舆论观察分析
  • 月之暗面开源:多模态推理模型(激活2.8B) Kimi-VL-A3B-Thinking
  • PCDN收益高低的关键因素
  • Python p_tqdm包介绍
  • 2025年土建施工员考试题库及答案
  • js中较为不错的对象内置方法
  • Cribl 通过Splunk search collector 来收集数据
  • 【时时三省】(C语言基础)选择结构程序综合举例
  • 第十五届蓝桥杯C/C++B组国赛真题讲解(分享去年比赛的一些真实感受)
  • 什么是回表?哪些数据库存在回表?
  • dcsdsds
  • ROS2:命令行学习
  • AUTOSAR图解==>AUTOSAR_SWS_MemoryMapping
  • sql server分析表大小
  • 《Python星球日记》第27天:Seaborn 可视化
  • 单片机基础知识-STM32
  • [MSPM0开发]之二MSPM0G3507之IOMUX功能概述(基于driverlib库)
  • 怎么快速做网站/全网整合营销推广方案
  • 有没有专门做装修的网站/关于seo的行业岗位有哪些
  • 哪些是网站建设/品牌营销策划方案案例
  • 医院网站建设 费用/长尾关键词在线查询
  • 网站做担保交易/站长之家工具查询
  • app产品网站建设/二级域名网站查询入口