Python 查找范围内的素数
这是我的代码,假设我有Python 查找范围内的素数,python,primes,Python,Primes,这是我的代码,假设我有素数(50100) 它应该返回[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行: def is_prime(number): for i in range(2, number): if number % 1 == 0 and numbe
素数(50100)
它应该返回[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
行:
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))
你的代码不起作用,因为你在第一次迭代中返回
True
或False
。可能是的重复,但你返回True
非常急切。下面已经回答了这个问题,但我要补充的是,在(2,number)
范围内迭代没有意义。您只需将数字
的一半计算在内,因为任何大于该数字的数字都无法平均划分为数字
。我可能还要确保number
是一个整数,否则范围可能会抛出错误。不要认为需要数字%1==0,它总是正确的。为了提高效率,只需向上取数字+1的平方根(加上1以确保在sqrt返回浮点时向上取下一个整数),然后print(is_prime(13))也将为false,这应该是真的case@user3419984不,是素数(13)
是真的
def is_prime(number):
for i in range(2, number):
if number % 1 == 0 and number % i == 0:
return False
return True
print(is_prime(13)) # True
print(is_prime(55)) # False