首页  >  文章  >  后端开发  >  为什么这段 Python 代码只计算素数而不打印它们?

为什么这段 Python 代码只计算素数而不打印它们?

Susan Sarandon
Susan Sarandon原创
2024-11-11 11:18:03648浏览

Why is this Python code only counting prime numbers but not printing them?

Python 中的简单素数生成器

此代码旨在生成简单的素数列表,但目前仅打印计数,无论数字是否为素数。

问题

代码使用嵌套循环来检查计数器(计数)是否能被以下数字整除2 为计数的平方根。但是,它错误地假设如果一个数字不能被内循环的当前迭代整除,则它必须是素数。

修复

解决此问题,我们引入一个布尔变量 isprime 来跟踪 count 的素数状态。在内部循环中,如果 count 可被 x 的当前值整除,我们将 isprime 设置为 False 并中断循环。这确保我们只打印真正素数的计数。

优化实现

虽然此代码提供了对素数生成的基本了解,但更有效的方法称为可以使用埃拉托斯特尼筛法。该技术首先假设所有数字都是素数,然后迭代序列,将非素数标记为合数。

这是埃拉托斯特尼筛法的高度优化实现:

def gen_primes():
    D = {}
    
    q = 2
    
    while True:
        if q not in D:
            yield q
            D[q * q] = [q]
        else:
            for p in D[q]:
                D.setdefault(p + q, []).append(p)
            del D[q]
        
        q += 1

This代码返回一个生成素数的生成器。它使用内存高效的映射系统来跟踪复合材料及其目击者。这种优化显着减少了生成大素数所需的时间和计算资源。

以上是为什么这段 Python 代码只计算素数而不打印它们?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn