为了账号安全,请及时绑定邮箱和手机立即绑定

不能将 2 定义为素数

不能将 2 定义为素数

临摹微笑 2022-06-28 15:48:48
我正在尝试定义素数,但我的算法无法识别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 False2 None3 True4 False5 True6 False7 True8 False9 True10 False11 True12 False13 True14 False15 True16 False17 True18 False19 True20 False此外,返回有一些错误,比如9is not a prime number.
查看完整描述

3 回答

?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

因为您的程序永远不会进入循环。


for d in range(2, n):

    if n % d == 0:

      return False # Is not prime

    return True

从 2 开始,直到n-1. 此外,您应该以不同的方式缩进。只有在您的程序退出循环后,您才应该return True:


for d in range(2, n):

    if n % d == 0:

      return False # Is not prime

return True

但是如果你想优化你的功能,它应该是这样的:


def is_prime_v1(n):

    if n <= 1:

        return False

    if n == 2:

        return True

    if n % 2 == 0:

        return False

    for d in range(3, round(n**0.5) + 1, 2):

        if n % d == 0:

            return False

    return True

由于您不需要检查数字本身,因此只有平方根。此外,任何偶数都不能是素数(2 除外),因为它可以被 2 整除。

编辑:

我很高兴我的回答有帮助:)


查看完整回答
反对 回复 2022-06-28
?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

您可以明确地将 2 定义为素数。


return True在您的 for 循环内,因此仅在 1 次迭代后返回 true (这就是您有错误的原因)。


对于素数,只检查您正在测试的数字的平方根就足够了,这对于较大的 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

  elif n == 2:

    return True


  for d in range(2, int(n**0.5) + 1):

    if n % d == 0:

      return False # Is not prime

  return True


查看完整回答
反对 回复 2022-06-28
?
qq_笑_17

TA贡献1818条经验 获得超7个赞

for d in range(2, n):

    if n % d == 0:

        return False # Is not prime

    return True

像为 1 一样为它创建一个单独的 if。


if n == 2:

    return True #2 is prime


查看完整回答
反对 回复 2022-06-28
  • 3 回答
  • 0 关注
  • 100 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信