ホームページ >バックエンド開発 >C++ >素数検出プログラムが失敗するのはなぜですか?どうすれば修正できますか?

素数検出プログラムが失敗するのはなぜですか?どうすれば修正できますか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-13 21:47:47284ブラウズ

Why Does My Prime Number Detection Program Fail, and How Can I Fix It?

欠陥のある素数検出器のデバッグ

long 変数で定義された範囲内の素数を識別するように設計されたプログラムは、出力を生成できません。 コードの分析により、2 つの重大な欠陥が明らかになりました:

  • 無限ループ: prime_num() 関数内の内部ループに欠陥のある条件 (i) が含まれており、無限ループが発生します。
  • 欠陥のある素数ロジック: 素数チェックが正しくありません。素数は 1 とそれ自体でのみ割り切れます。条件 if (i != j && i % j == 0) は、追加の約数を含む数値を誤って素数として分類します。

強化された素数検索アルゴリズム

より効率的な解決策は、「試行分割篩」方法を採用します。

<code class="language-csharp">Enumerable.Range(0, Math.Floor(2.52*Math.Sqrt(num)/Math.Log(num))).Aggregate(
    Enumerable.Range(2, num-1).ToList(), 
    (result, index) => { 
        var bp = result[index]; var sqr = bp * bp;
        result.RemoveAll(i => i >= sqr && i % bp == 0); 
        return result; 
    }
);</code>

この改良されたアルゴリズムでは、近似を使用してテストされる主な候補の数を最小限に抑え、パフォーマンスが大幅に向上します。

以上が素数検出プログラムが失敗するのはなぜですか?どうすれば修正できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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