長い変数での素数識別のトラブルシューティング
長い変数内の素数を識別しようとすると出力が得られないという問題がユーザーから報告されました。 元のプログラムには、正しい結果を妨げる欠陥が含まれていました。
問題分析
主なエラーは、ループ変数の初期化が正しくないことが原因でした。 外側のループの条件 (i <= num
) は非効率的であり、プログラムが無限に実行されるか、誤った結果が生成される可能性があります。
拡張コード
以下は、これらの問題を解決し、指定された範囲内で素数を効率的に見つける修正プログラムです。
<code class="language-csharp">using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace PrimeNumberFinder { class Program { static void FindPrimes(long num) { bool isPrime; for (long i = 2; i <= num; i++) { isPrime = true; for (long j = 2; j * j <= i; j++) { if (i % j == 0) { isPrime = false; break; } } if (isPrime) { Console.WriteLine(i); } } } static void Main(string[] args) { Console.WriteLine("Enter a number:"); long inputNum; if (long.TryParse(Console.ReadLine(), out inputNum)) { FindPrimes(inputNum); } else { Console.WriteLine("Invalid input. Please enter a valid long integer."); } } } }</code>
パフォーマンスの強化
この改良されたコードはパフォーマンスが向上し、時間計算量が O(n log log n) に近づき、より広い範囲の数値に適しています。 内部ループ条件 (j * j <= i
) は重要な最適化です。
以上が私のプログラムが長い変数内の素数の検索に失敗するのはなぜですか?どうすれば修正できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。