追求优雅: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中文网其他相关文章!