这段代码如何查找质数,is_prime(9)返回True?

时间:2018-11-11 01:08:37

标签: python primes

def is_prime(x):
  if x < 2:
    return False
  else:
    for n in range(2, x):
      if x % n == 0:
        return False
      else:
        return True 

print is_prime(9)返回True而不是False

我不太了解。

range (2,9)包括以下列表:2,3,4,5,6,7,8

9 % 3 == 0, 那么,为什么我没有得到False作为该函数的答案?

2 个答案:

答案 0 :(得分:1)

这是因为您实际上没有循环,因为在第一个周期中返回True(9%2 == 0为False)。

类似这样的问题应该可以解决:

def is_prime(x):
  if x < 2:
    return False
  for n in range(2, x):
    if x % n == 0:
      return False
  return True

答案 1 :(得分:1)

通过保留原始循环并且不提早退出,可以大大简化逻辑。您可以将第一个条件添加到最终收益中:

def is_prime(x):
  for n in range(2, x):
    if x % n == 0:
      return False

  return x > 2

顺便说一句,Erastothenes的筛子是解决此问题的一种很酷的方法,它具有更好的运行时复杂性。这是简短说明的链接:

https://math.stackexchange.com/questions/58799/why-in-sieve-of-erastothenes-of-n-number-you-need-to-check-and-cross-out-numbe