高效生成无限素数序列遇问题:代码生成等差1序列而非素数
问题分析与修复
你的代码存在两个核心错误,导致无法生成预期的素数序列:
- 循环逻辑错误:遍历素数列表时,每处理一个素数就执行
prime +=1,导致单个prime值只被一个素数检测,还没完成所有素数因子的校验,prime就已经自增,完全打乱了检测流程。 - 素数判定逻辑错误:原代码只要遇到一个不能整除
prime的素数,就直接判定它是素数并添加到列表,这不符合素数判定规则——必须是所有小于它的素数都不能整除它,才能判定为素数。
修正后的代码
prime = 5 list_of_prime = [2, 3] while True: # 用无限循环持续生成素数 is_prime = True # 遍历已有的素数,逐一检测是否能整除当前prime for p in list_of_prime: if prime % p == 0: is_prime = False break # 只要有一个素数能整除,直接终止检测 if is_prime: print(prime) list_of_prime.append(prime) prime += 1 # 完成当前prime的所有检测后,再自增进入下一轮
代码逻辑说明
- 用
while True实现无限循环,保证素数序列持续生成。 - 对每个
prime先默认它是素数,再通过遍历素数列表逐一校验。 - 只要发现有素数能整除当前
prime,立即标记为非素数并跳出检测循环,避免无效计算。 - 只有当所有素数都无法整除
prime时,才将其打印并加入素数列表。 - 等当前
prime的所有检测完成后,再执行自增操作,确保每个数都被完整校验。
内容的提问来源于stack exchange,提问作者sartaj ansari
相关产品推荐
相关产品推荐

