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匿名函数来改进算法,提升运行效率。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

PythonFun

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

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

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

打赏作者

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

抵扣说明:

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

余额充值