不能将 2 定义为素数

我正在尝试定义素数,但我的算法无法识别2为prime number. 而是返回None。我在 中尝试Google Colab,Jupiter Notebook结果PyCharm相同。


我的代码:


# V1) Test all divisors from 2 through n-1. (skip 1 and n)

def is_prime_v1(n):

  """ Return 'True' if 'n' is a prime number. False otherwise. """

  if n == 1:

    return False # 1 is not prime


  for d in range(2, n):

    if n % d == 0:

      return False # Is not prime

    return True


# ===== Test Function =====

for n in range(1, 21):

  print(n, is_prime_v1(n))

我的输出:


1 False

2 None

3 True

4 False

5 True

6 False

7 True

8 False

9 True

10 False

11 True

12 False

13 True

14 False

15 True

16 False

17 True

18 False

19 True

20 False

此外,返回有一些错误,比如9is not a prime number.


临摹微笑
浏览 101回答 3
3回答

繁星点点滴滴

因为您的程序永远不会进入循环。for d in range(2, n):&nbsp; &nbsp; if n % d == 0:&nbsp; &nbsp; &nbsp; return False # Is not prime&nbsp; &nbsp; return True从 2 开始,直到n-1. 此外,您应该以不同的方式缩进。只有在您的程序退出循环后,您才应该return True:for d in range(2, n):&nbsp; &nbsp; if n % d == 0:&nbsp; &nbsp; &nbsp; return False # Is not primereturn True但是如果你想优化你的功能,它应该是这样的:def is_prime_v1(n):&nbsp; &nbsp; if n <= 1:&nbsp; &nbsp; &nbsp; &nbsp; return False&nbsp; &nbsp; if n == 2:&nbsp; &nbsp; &nbsp; &nbsp; return True&nbsp; &nbsp; if n % 2 == 0:&nbsp; &nbsp; &nbsp; &nbsp; return False&nbsp; &nbsp; for d in range(3, round(n**0.5) + 1, 2):&nbsp; &nbsp; &nbsp; &nbsp; if n % d == 0:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return False&nbsp; &nbsp; return True由于您不需要检查数字本身,因此只有平方根。此外,任何偶数都不能是素数(2 除外),因为它可以被 2 整除。编辑:我很高兴我的回答有帮助:)

蝴蝶刀刀

您可以明确地将 2 定义为素数。return True在您的 for 循环内,因此仅在 1 次迭代后返回 true (这就是您有错误的原因)。对于素数,只检查您正在测试的数字的平方根就足够了,这对于较大的 n 应该会大大加快速度。尝试这个def is_prime_v1(n):&nbsp; """ Return 'True' if 'n' is a prime number. False otherwise. """&nbsp; if n == 1:&nbsp; &nbsp; return False # 1 is not prime&nbsp; elif n == 2:&nbsp; &nbsp; return True&nbsp; for d in range(2, int(n**0.5) + 1):&nbsp; &nbsp; if n % d == 0:&nbsp; &nbsp; &nbsp; return False # Is not prime&nbsp; return True

qq_笑_17

for d in range(2, n):&nbsp; &nbsp; if n % d == 0:&nbsp; &nbsp; &nbsp; &nbsp; return False # Is not prime&nbsp; &nbsp; return True像为 1 一样为它创建一个单独的 if。if n == 2:&nbsp; &nbsp; return True #2 is prime
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python