簡體   English   中英

python:檢查數字是否為素數,指定范圍

[英]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 (例如,當num3 )。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM