Python求第1000个质数代码调试:计数器异常求助
问题分析与解决
代码失效原因
- for循环强制重置count变量:你用
for count in range(0,1001)控制循环,这会让count在每次迭代时被range序列里的下一个值覆盖。哪怕你在找到质数时执行count +=1,下一次循环count还是会被range的数值重新赋值,这个自增操作完全无效。 - 循环逻辑错位:外层for循环固定执行1001次,不管当前
prime_test是不是质数,都会执行prime_test +=1,导致count和prime_test同步递增,根本起不到统计质数数量的作用。
解决方法
把外层的for循环改成while循环,用count的数值控制循环终止条件——只要count没到1000,就持续检查下一个数。这样count只会在找到质数时递增,prime_test则逐个遍历自然数。
修改后的代码:
prime_test = 2 # 从最小的质数开始,跳过1(1不是质数) count = 0 while count < 1000: is_prime = True # 优化:只检查到平方根,减少循环次数提升效率 for divisor in range(2, int(prime_test ** 0.5) + 1): if prime_test % divisor == 0: is_prime = False break if is_prime: print(prime_test) count += 1 prime_test += 1
额外优化说明
- 初始值设为2:1不是质数,直接跳过避免无效检查。
- 内层循环到平方根:如果一个数n存在大于其平方根的因数,对应的另一个因数必然小于平方根,所以检查到平方根就足够,能大幅提升运行效率。
内容的提问来源于stack exchange,提问作者irtotallynotrobot
相关产品推荐
相关产品推荐

