在Python 中列印素數系列
要列印指定範圍內的一系列素數,常見的方法是迭代範圍並檢查每個數字是否為質數。但是,所提供的程式碼試圖實現此目的,但輸出一系列奇數而不是素數。讓我們檢查這個問題並找到最佳解決方案。
提供的程式碼迭代範圍 (1, 101),並針對每個數字檢查該數字本身的整除性。這就是錯誤所在。質數只能被 1 和它本身整除,所以你只需要檢查從 2 到數字本身的數字。
更正後的程式碼應該如下:
<code class="python">for num in range(2, 101): prime = True for i in range(2, num): if (num % i == 0): prime = False if prime: print(num)</code>
這個修改後的程式碼為每個數字將布林標誌prime 初始化為True,並檢查數字直至數字本身,確保正確的質數識別。
或者,更簡潔和Python 的方法是:
<code class="python">for num in range(2, 101): if all(num % i != 0 for i in range(2, num)): print(num)</code>
此程式碼使用all() 函數中的產生器表達式來確定該數字是否可以從2 到其自身(不包括其本身)的任何數字整除。如果不存在這樣的因數,則該數字將列印為質數。
為了提高效率,您只能檢查不超過該數字的平方根的除數。這是因為如果一個數有較大的因數,它也一定有一個較小的對應因數。下面的程式碼結合了這個最佳化:
<code class="python">import math for num in range(2, 101): if all(num % i != 0 for i in range(2, int(math.sqrt(num)) + 1)): print(num)</code>
最後,為了進一步提高效率,您可以跳過檢查偶數,因為大於 2 的素數總是奇數。以下程式碼反映了這種最佳化:
<code class="python">import math print(2) for num in range(3, 101, 2): if all(num % i != 0 for i in range(3, int(math.sqrt(num)) + 1, 2)): print(num)</code>
以上是如何在Python中正確列印素數系列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!