【问题标题】:Primality Test algorithm fails素性测试算法失败
【发布时间】:2019-11-06 02:55:35
【问题描述】:

我创建了一个简单的素数测试算法,但对于像 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")

感谢任何帮助。

【问题讨论】:

  • 失败意味着当你输入 15 但打印 yes 对吗?
  • 试试for...else
  • @Tserenjamts 是的,但它会打印“Yes. No.”
  • @JohnnyMopp 是的,去过那里,不起作用(添加到问题中)
  • 示例:ideone.com/TSa5wf。注意它是for...else,而不是if...else

标签: python algorithm numbers primes primality-test


【解决方案1】:

你在循环中有你的 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")

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

【讨论】:

  • flag 只是一个变量...您可以将其重命名为其他任何名称。你称它为标志,因为它是一个“标志”(在我们的例子中,它告诉我们一个数字是否不是素数)
【解决方案2】:

这是我根据您的示例进行的快速重构:

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')

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 我改变了它,我希望它看起来像你想要做的那样
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-19
    • 2017-05-02
    • 1970-01-01
    • 1970-01-01
    • 2021-05-27
    • 1970-01-01
    • 2021-12-15
    相关资源
    最近更新 更多