如何修正无法识别2和3为质数的≤N质数统计Python程序?
修复方案
原代码存在两个关键问题:
- 当i为2或3时,内层循环的
range(2, int(i/2)+1)生成的是空区间(比如i=2时,int(2/2)=1,range(2,2)没有元素),循环根本不会执行,所以这两个数永远不会被加入质数列表 - 内层循环的逻辑完全错误:只要找到一个j不能整除i就把i加入列表,这会导致合数被多次添加,同时漏掉真正的质数判断逻辑
修复后的代码如下:
N = int(input("Enter number: ")) count = 0 primes = [] for i in range(2, N+1): is_prime = True # 先假设当前数是质数 # 优化:判断到sqrt(i)就够了,比i/2效率更高 for j in range(2, int(i**0.5) + 1): if i % j == 0: # 如果能被整除,说明不是质数 is_prime = False break # 提前退出循环,没必要继续判断 if is_prime: # 确认是质数后再添加 primes.append(i) count += 1 print(count) print(primes)
关键修复点说明
- 新增
is_prime标记,先假设每个数是质数,再通过内层循环验证 - 内层循环范围优化到
int(i**0.5)+1,因为如果i有大于sqrt(i)的因数,那对应的另一个因数必然小于sqrt(i),这样能减少循环次数,提升效率 - 当发现i能被j整除时,立即标记为非质数并跳出循环,避免不必要的计算
- 循环结束后统一判断
is_prime的状态,符合质数的定义:大于1的自然数,除了1和自身外没有其他因数
内容的提问来源于stack exchange,提问作者Albert van Zyl
相关产品推荐
相关产品推荐

