素数测试算法失败

Primality Test algorithm fails

我创建了一个简单的素数测试算法,但它对 15 这样的数字失败了。为什么?

number = int(input("Test if Prime: "))

print ("Is " + str(number) + " Prime?: ")

for i in range (2, number): 
  if number % i == 0: 
    print ("No")
    break
  else: 
    print ("Yes")

我尝试了其他变体的 elif 语句,但它仍然不起作用:

number = int(input("Test if Prime: "))

print ("Is " + str(number) + " Prime?: ")

for i in range (2, number): 
  if number % i == 0: 
    break
  elif number % i != 0: 
    print ("Yes")

感谢任何帮助。

循环中有 else 条件。在任何时候,它只会检查一个值...

修改您的 for 循环以打印出它正在检查的数字:

for i in range (2, number): 
  print (i)
  if number % i == 0: 
    print ("No")
    break
  else: 
    print ("Yes")

打印出来(对于数字 = 15):

2
Yes
3
No

如果它打印出 'No' 个数字 - 1 次

,你就知道它是有效的

要稍微修改一下您所做的,我们可以将其更改为:

flag = False
for i in range (2, number): 
  if number % i == 0: 
    print ("No")
    flag = True
    break
if (!flag)
  print("Yes")

所有这一切都是将 print 语句推到循环之外(对于一个数字来说,它需要不能被所有小于它的数字整除)。该标志确保您只打印出 True 或 False(您不想同时打印出两者)

这是我根据您的示例所做的快速重构:

def is_prime_simple(number):
    is_prime = True
    for i in range(2, number):
        if number % i == 0:
            is_prime = False
            break
    return is_prime

number = int(input("Test if Prime: "))

print ("Is " + str(number) + " Prime?: ")
print('Yes' if is_prime_simple(number) else 'No')

由于缩进错误,否则将对所有奇数的非约数执行else

for i in range (2, number):
  if number % i == 0:
    print ("No")
      break
else: 
  print ("Yes")