首頁 >後端開發 >C++ >為什麼我的程式無法在 long 變數中找到質數,如何修復它?

為什麼我的程式無法在 long 變數中找到質數,如何修復它?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-13 22:01:46910瀏覽

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

長變數中素數辨識的故障排除

使用者報告了在嘗試識別長變數中的素數時獲取輸出的問題。 原始程式包含一個缺陷,無法得到正確的結果。

問題分析

主要錯誤源自於不正確的迴圈變數初始化。 外循環的條件 (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) 是一個關鍵的最佳化。

以上是為什麼我的程式無法在 long 變數中找到質數,如何修復它?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn