首页 > 后端开发 > C++ > 在 C# 或 Java 中生成素数最优雅的方法是什么?

在 C# 或 Java 中生成素数最优雅的方法是什么?

Mary-Kate Olsen
发布: 2025-01-13 10:43:43
原创
430 人浏览过

What's the Most Elegant Way to Generate Prime Numbers in C# or Java?

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板