亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

不能將 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 關注
  • 133 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號