[英]python: checking if a number is prime, specifying range
我正在編寫的這段代碼有問題,以檢查數字是否為質數。
import sys
import math
def is_prime(num):
for j in range(2,(int(math.sqrt(num)+1))):
if (num % j) == 0:
return False
else:
return True
for a in range(1,10):
if is_prime(a):
print a
我得到的是:5、7、9
我不明白為什么要排除3個? 我回到了代碼的第一部分,嘗試了is_prime(3)
,但是它既沒有返回True也沒有返回False。 這是否意味着3超出了我要檢查的除數范圍? 我應該如何糾正代碼,使素數列表中包含3?
編輯:再次您好,謝謝您到目前為止的答案,所以我試圖使用int(round())解決截斷的問題。 我也嘗試過將else
塊放在循環之外,但似乎不起作用。 誰能解釋為什么這還不夠,並建議我應該如何糾正它才能起作用? 提前致謝! :)
import sys
import math
def is_prime(num):
for j in range(2,int(round(math.sqrt(num)+1)):
if (num % j) == 0:
return False
return True
一旦發現該數字不能被任何 j
整除,您的函數將返回True
。 如果數字不能被所有 j
整除,則僅應返回True
。
作為修復此錯誤的副作用,您還將修復該錯誤,該錯誤有時會使您的函數返回None
(例如,當num
為3
)。
int()
截斷而不是int(math.sqrt(3) + 1) == 2
,因此int(math.sqrt(3) + 1) == 2
。 range(2, 2)
為空,因此不會返回任何內容。
另一個問題是您的else
塊在循環內部 。 如果測試前100個數字,您將很快注意到is_prime
函數將為任何奇數返回True
。
3的平方根小於2,因此永遠不會進入循環並且什么也不返回。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.