Rumah >pembangunan bahagian belakang >C++ >Mengapa program saya gagal mencari nombor perdana dalam pembolehubah yang panjang, dan bagaimana saya boleh membetulkannya?

Mengapa program saya gagal mencari nombor perdana dalam pembolehubah yang panjang, dan bagaimana saya boleh membetulkannya?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-13 22:01:46910semak imbas

Why is my program failing to find prime numbers within a long variable, and how can I fix it?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn