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 整除。
編輯:
我很高興我的回答有幫助:)

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

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
添加回答
舉報