追求優雅:C#或Java素數產生的最佳實踐
素數生成一直是程式設計師長期探索的課題,如何在速度和程式碼清晰度之間取得平衡,成為了演算法設計的關鍵。本文探討在C#或Java中生成質數的優雅方法。
改良的埃拉托色尼篩法
埃拉托色尼篩法是尋找質數的常用方法之一。透過迭代去除每個質數的倍數,我們可以篩選所有非素數。以下程式碼是對標準篩法演算法的改進:
<code class="language-c#">public static List<int> GeneratePrimes(int limit) { if (limit < 2) return new List<int>(); var primes = new bool[limit + 1]; for (int i = 2; i * i <= limit; i++) { if (!primes[i]) { for (int j = i * i; j <= limit; j += i) { primes[j] = true; } } } var result = new List<int>(); for (int i = 2; i <= limit; i++) { if (!primes[i]) { result.Add(i); } } return result; }</code>
基於LINQ的素數產生
另一種方法是利用LINQ的延遲計算特性。這段程式碼回傳一個無限的素數序列:
<code class="language-c#">public static IEnumerable<int> GeneratePrimesLINQ() { yield return 2; yield return 3; var primes = new HashSet<int> { 2, 3 }; for (int i = 5; ; i += 2) { if (!primes.Any(p => i % p == 0)) { primes.Add(i); yield return i; } } }</code>
方法選擇
選擇哪一種方法取決於特定的應用場景。改良的埃拉托色尼篩法在尋找固定數量的質數時效率很高,而基於LINQ的方法則提供了一個適合增量處理的惰性無限序列。最終,最優雅的解決方案是能夠清晰且有效率地滿足特定需求的方案。
以上是在 C# 或 Java 中產生素數最優雅的方法是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!