Rumah >pembangunan bahagian belakang >C++ >Mengapa program saya gagal mencari nombor perdana dalam pembolehubah yang panjang, dan bagaimana saya boleh membetulkannya?
Menyelesaikan Masalah Pengenalan Nombor Perdana dalam Pembolehubah Panjang
Seorang pengguna melaporkan masalah mendapatkan output apabila cuba mengenal pasti nombor perdana dalam pembolehubah panjang. Program asal mengandungi kecacatan yang menghalang keputusan yang betul.
Analisis Masalah
Ralat utama berpunca daripada permulaan pembolehubah gelung yang salah. Keadaan gelung luar (i <= num
) adalah tidak cekap dan berkemungkinan menyebabkan atur cara berjalan selama-lamanya atau menghasilkan keputusan yang salah.
Kod Dipertingkat
Di bawah ialah program yang disemak semula yang menyelesaikan isu ini dan mencari nombor perdana dengan cekap dalam julat tertentu:
<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>
Peningkatan Prestasi
Kod yang dipertingkat ini menawarkan prestasi yang lebih baik, menghampiri kerumitan masa O(n log n), menjadikannya sesuai untuk julat nombor yang lebih besar. Keadaan gelung dalam (j * j <= i
) ialah pengoptimuman utama.
Atas ialah kandungan terperinci Mengapa program saya gagal mencari nombor perdana dalam pembolehubah yang panjang, dan bagaimana saya boleh membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!