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中文網其他相關文章!