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中文网其他相关文章!