我已经制作了一个Prime数字查找器,您输入一个数字,它会告诉您天气是素数。
while True:
p = int(input('Enter a number '))
for d in range(2, p):
if p % d == 0:
print(p, "is not a prime number!", d,"*", p//d,"=",p)
break
else:
print(p, "is a prime number!")
break
然而,它显示的数字显然不是素数。我认为它只将它除以2,因为我尝试的所有奇数都输出为奇数。
任何人都可以帮忙解决这个问题吗?
答案 0 :(得分:2)
你必须先检查所有数字才能说出它的最佳状态。目前,您的循环在第一次检查时退出(d == 2
),如果False
则返回p % 2 == 0
,否则True
。
您应该将else
语句放在循环的末尾,如下所示:
while True:
p = int(input('Enter a number '))
for d in range(2, p):
if p % d == 0:
print(p, "is not a prime number!", d,"*", p//d,"=",p)
break
else:
print(p, "is a prime number!")
仅当循环未以else
结束时才执行break
。这意味着如果没有找到任何分隔符,那么您的号码就是素数。
此外,请注意,您不必在p
之前检查号码,您可以在sqrt(p)
停留并逐两迭代:for d in range(3, int(p**0.5) + 1, 2)
。