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