簡體   English   中英

為什么我的第一個 function 找到一個素數需要比另一個更長的時間?

[英]Why does my first function to find a prime number take so much longer than the other?

我有兩個功能: isPrimealsoPrime 如果數字 (x) 是質數,兩者都意味着返回 True 或 False。 isPrime(x, pLis)處理不斷增長的素數列表,並查看 x 是否是任何素數的倍數。 alsoPrime(x)搜索從 3 開始到 x 的根結束的所有奇數。 然后我使用一個 for 循環,從 3 開始,以 2 為間隔上升。

我預計 isPrime 會更快,因為它應該跳過數字,即:

isPrime -> 3、5、7、11、13、17、19

還有素數 -> 3, 5, 7, 9 , 11, 13, 15 , 17, 19

但是alsoPrime的速度也非常快 - 在搜索前 1 000 000 個數字時快 100 倍。

有人可以解釋為什么嗎? 每次調用pLis都需要很長時間嗎?


def isPrime(x, pLis):
    for item in pLis:
        if x % item == 0:
            return False
    return True


def alsoPrime(x):
    for i in range(3, round(x**0.5)+1, 2):
        if x % i == 0:
            return False
    return True

當您真的只需要遍歷候選對象的正方形時,您正在遍歷您在isPrime中發現的所有素數,就像您在alsoPrime中所做的那樣。 更多的迭代意味着更慢的代碼。 驗證這一點的快速方法是計算迭代次數,如下所示:

def isPrime(x, pLis):
    for i, item in enumerate(pLis):
        if x % item == 0:
            print(f"{x} is not prime after {i} iterations")
            return False
    print(f"{x} is prime after {i} iterations")
    return True

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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