我为提出这样一个无用的问题而道歉,但是我在用Python编写一个非常基本的程序来检查一个数字是否为素数时会遇到问题。
这是我的代码:
def is_prime(x):
if x < 2:
print ('Please enter a number >= 2.')
else:
if x == 2 or x == 3 or x == 5:
return True
if x == 4:
return False
for num in range (2, int(x/2)):
if x % num == 0:
return False
break
else:
return True
但是对于所有奇数都会返回True;不只是主要的。我不明白为什么。如果有人能指出我正确的方向,我将不胜感激! :)
答案 0 :(得分:2)
您的代码只会检查num % 2
并返回True
或False
,具体取决于结果。因此,它会为所有奇数返回True
。如果循环没有遇到return True
,您应该return False
,请参阅代码。
def is_prime(x):
if x < 2:
print ('Please enter a number >= 2.')
else:
if x == 2 or x == 3 or x == 5:
return True
if x == 4:
return False
for num in range (2, int(x/2)):
if x % num == 0:
return False
return True
>>> is_prime(11)
True
>>> is_prime(9)
False
P.S - break
之后您不需要return
。 :)
答案 1 :(得分:0)
这个代码,你在循环中,防止循环每次运行多次;因此你只能检查2的可分性。这是因为return语句会立即终止整个函数(因此你所拥有的中断也是多余的):
if x % num == 0:
return False
break
else:
return True
你可能想要的是:
for num in range (2, int(x/2)):
if x % num == 0:
return False
return True
答案 2 :(得分:0)
检查数字是否为素数(有效)是一项非常艰巨的任务,因为素数并不真正遵循任何不同的模式:http://en.wikipedia.org/wiki/Primality_test
在您的代码中,这是最直观(但效率低下)的算法,一旦您看到该数字不能被2整除,就会错误地返回true
。您应该运行整个{{在确定结果为for
之前循环1}}。所以你应该做的是true
如果对于循环中的某些return false
,你会发现num
,但是否则,一旦你突破循环,只需返回x % num == 0
。
答案 3 :(得分:0)
您的功能可以简化:
def is_prime(x):
if x==2 or (x>2 and x%2):
return all(x%n for n in xrange(3, int(x**0.5)+1, 2))
return False