【问题标题】:Find prime numbers in range查找范围内的素数
【发布时间】: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 返回浮点数时上升到下一个整数)

标签: python primes


【解决方案1】:

重新定位return True 行:

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

您的代码不起作用,因为您在第一次迭代期间返回了 TrueFalse

【讨论】:

  • 那么 print(is_prime(13)) 也会为假
  • 在这种情况下应该为真
  • @user3419984 不,is_prime(13) 是真的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-03
  • 2012-12-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多