首页 > 后端开发 > Python教程 > 我们如何在 Python 中优化埃拉托斯特尼筛算法以加快素数生成速度?

我们如何在 Python 中优化埃拉托斯特尼筛算法以加快素数生成速度?

Mary-Kate Olsen
发布: 2024-12-04 08:49:12
原创
478 人浏览过

How Can We Optimize the Sieve of Eratosthenes Algorithm in Python for Faster Prime Number Generation?

埃拉托斯特尼筛法 - 在 Python 中查找素数

问题:

尝试实现时Python 中的埃拉托色尼筛法算法,用户经常会遇到执行速度慢的情况,特别是在搜索 100 万以上的素数时。

解决方案:

给定的实现提出了几个需要改进的领域:

1.未优化的算法:

  • 初始实现 primes_sieve 维护素数列表,导致元素删除效率低下。
  • primes_sieve1 使用字典作为素数标志,但缺乏适当的迭代和冗余因素标记。

2.列表操作效率低下:

  • 从 Python 列表中删除元素是一项昂贵的操作,因为需要移动后续元素。

优化实现:

要解决这些问题,请考虑以下优化实现:

def primes_sieve2(limit):
    a = [True] * limit
    a[0] = a[1] = False

    for (i, isprime) in enumerate(a):
        if isprime:
            yield i
            for n in range(i*i, limit, i):     # Mark factors non-prime
                a[n] = False
登录后复制

主要改进:

  • 直接使用列表作为素数标志,避免昂贵的列表调整大小。
  • 延迟生成按需素数,无需存储完整的素数列表。
  • 从素数平方开始,有效标记非素数因子。

以上是我们如何在 Python 中优化埃拉托斯特尼筛算法以加快素数生成速度?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板