ホームページ >バックエンド開発 >C++ >C# または Java で素数を生成する最もエレガントな方法は何ですか?

C# または Java で素数を生成する最もエレガントな方法は何ですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-13 10:43:43433ブラウズ

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

優雅さの追求: C# または Java での素数生成のベスト プラクティス

素数の生成は、速度とコードの明瞭さの間でバランスを取る方法がアルゴリズム設計の鍵となっており、プログラマーが長い間模索してきたテーマです。この記事では、C# または Java で素数を生成するエレガントな方法について説明します。

改良されたエラトステネスのふるい

エラトステネスのふるいは、素数を見つけるための一般的な方法の 1 つです。各素数の倍数を繰り返し削除することで、素数以外の数値をすべて除外できます。次のコードは、標準の sieve アルゴリズムを改良したものです:

<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 に基づく素数生成

もう 1 つのアプローチは、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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。