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