【发布时间】:2014-04-15 09:32:15
【问题描述】:
def is_prime(number):
for i in range(2, number):
if number % 1 == 0 and number % i == 0:
return False
else:
return True
print(is_prime(13))
print(is_prime(55)) #True ##Why ???
def prime_numbers(a, b):
lst = []
for i in range(a,b+1):
if is_prime(i):
lst.append(i)
return lst
print(prime_numbers(50, 100))
这是我的代码,假设我有prime_numbers(50, 100)。
它应该返回 [53, 59, 61, 67, 71, 73, 79, 83, 89, 97] 而不是
[51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99].
那么我的代码有什么问题?
【问题讨论】:
-
但是你回
True远远地热切。 -
下面已经回答了这个问题,但我只想补充一点,在
(2, number)范围内进行迭代是没有意义的。您只需要达到number的一半,因为任何大于该数字的数字都不能均分到number。我可能还要确保number是一个整数,否则range可能会引发错误。 -
不要认为 number%1==0 是必需的,它总是正确的。为了提高效率,只需要增加数字 + 1 的平方根(添加 1 是为了确保在 sqrt 返回浮点数时上升到下一个整数)