為什麼這段 Python 程式碼只計算素數而不列印它們?

Susan Sarandon
發布: 2024-11-11 11:18:03
原創
620 人瀏覽過

Why is this Python code only counting prime numbers but not printing them?

Python 中的簡單素數產生器

此程式碼旨在產生簡單的素數列表,但目前僅列印計數,無論一個數是否是質數。

問題

程式碼使用巢狀迴圈來檢查計數器(計數)是否可以被從 2 到計數平方根的數字整除。但是,它錯誤地假設如果一個數字不能被內循環的當前迭代整除,則它必須是素數。

修正

解決此問題,我們引入一個布林變數 isprime 來追蹤 count 的質數狀態。在內部循環中,如果 count 可被 x 的目前值整除,我們將 isprime 設為 False 並中斷循環。這確保我們只列印真正素數的計數。

最佳化實現

雖然此程式碼提供了對素數產生的基本了解,但更有效的方法稱為可以使用埃拉托斯特尼篩法。此技術首先假設所有數字都是素數,然後迭代序列,將非素數標記為合成數。

這是埃拉托斯特尼篩法的高度最佳化實作:

def gen_primes():
    D = {}
    
    q = 2
    
    while True:
        if q not in D:
            yield q
            D[q * q] = [q]
        else:
            for p in D[q]:
                D.setdefault(p + q, []).append(p)
            del D[q]
        
        q += 1
登入後複製

This程式碼回傳一個產生質數的產生器。它使用記憶體高效的映射系統來追蹤複合材料及其目擊者。這種最佳化顯著減少了產生大素數所需的時間和計算資源。

以上是為什麼這段 Python 程式碼只計算素數而不列印它們?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板