python—这段代码中查找素因子分解有什么错误

6rqinv9w  于 2021-09-08  发布在  Java
关注(0)|答案(3)|浏览(236)

我试图用这段代码找到素数分解,但程序进入了一个无限循环。我试图找出是什么使程序进入这个无限循环,但不幸的是我不能。代码是:

N = int(input())
B = N
L = []
while B != 1:
    for i in range(2,N):
        if N % i ==0:
            L.append(i)
            B = N // i
            break
    else:
        L.append(N)
        B = 1
L.pop()
print(L)
n53p2ov0

n53p2ov01#

问题在于 break 语句,每次for循环开始和条件 if N % i ==0 到达时,将强制启动一个新的for循环,这将创建一个无限循环。所以你要做的就是移除 break ```
N = int(input())
B = N
L = []
while B != 1:
for i in range(2,N):
if N % i ==0:
L.append(i)
B = N // i
else:
L.append(N)
B = 1
L.pop()
print(L)

打印出:

10
[2, 5]

编辑
这就是无穷循环的问题所在,但在某些情况下,例如20,它的逻辑是错误的,因此无法给出正确的答案。我修改了一点代码,这就是我所拥有的。

N = int(input())
B = N
L = []
while B != 1:
for i in range(2,N):
if N % i ==0:
L.append(i)
N = N // i
break
else:
L.append(N)
B = 1
print(L)

apeeds0o

apeeds0o2#

而b!=1:给你一个无限循环。您可以使用调试器来查看,例如,当n=9时,b永远不会变为1,并且脚本一直将3追加到l。

ohtdti5x

ohtdti5x3#

你从来没有增加过我。break语句将带您进入“while b!=1". 所以它无限地将2(或n的第一个因子)附加到l上。

相关问题