You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python查询区间质数代码重复输出相同数字的问题求助

解决区间质数查询代码的重复输出问题

你的代码出现重复输出的核心原因是:在内部循环的else分支里直接打印数字。对于一个质数来说,内部循环会遍历从2到该数减一的所有整数,每一次遇到不能整除的数都会触发一次打印,所以质数会被重复打印多次;甚至像15这种非质数,也会在i=2时因为15%2≠0而被打印一次,直到i=3时才break。

修改方案1:使用标志位判断

设置一个布尔变量标记当前数是否为质数,遍历完所有可能的因数后,再根据标志位决定是否打印:

number1 = int(input("Enter The First Number "))
number2 = int(input("Enter The Second Number: "))

for number in range(number1, number2 + 1):
    if number > 1:
        is_prime = True
        for i in range(2, number):
            if (number % i) == 0:
                is_prime = False
                break
        if is_prime:
            print(number)

修改方案2:利用Python的for-else语法

Python中for循环的else分支会在循环没有被break中断时执行,刚好符合质数的判断逻辑(遍历完所有因数都没找到能整除的数):

number1 = int(input("Enter The First Number "))
number2 = int(input("Enter The Second Number: "))

for number in range(number1, number2 + 1):
    if number > 1:
        for i in range(2, number):
            if (number % i) == 0:
                break
        else:
            # 只有当循环正常结束(未触发break)时才执行
            print(number)

优化建议(可选)

其实遍历因数时不需要到number-1,只需要到sqrt(number)即可,因为如果一个数有大于其平方根的因数,必然对应一个小于平方根的因数,这样能提升效率:

import math

number1 = int(input("Enter The First Number "))
number2 = int(input("Enter The Second Number: "))

for number in range(number1, number2 + 1):
    if number > 1:
        is_prime = True
        for i in range(2, int(math.sqrt(number)) + 1):
            if (number % i) == 0:
                is_prime = False
                break
        if is_prime:
            print(number)

内容的提问来源于stack exchange,提问作者fatiheren

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 12:50:15