簡體   English   中英

為什么我找到最大素數的程序永遠不會寫入控制台?

[英]Why does my program for finding the largest prime never writes to console?

我調試了我的代碼,一切都很完美。 但是我的代碼由於某種原因從未寫入控制台。

這是我的代碼:

  long largest = 0;


        for (long i = 1; i < 600851475144; i++)
        {
            long check = 0;
            for (long j = 1; j < i + 1; j++)
            {

                if ((i%j) == 0)
                {
                    check++;
                }
            }
            if (check == 2)
            {
                largest = i;
            }
        }

        Console.WriteLine(largest);
        Console.ReadKey();

問題:如何寫入控制台?

什么?

它將完成,但它將永遠持續,因為它必須做的所有迭代。

尋找計算是一項非常密集的計算,特別是以您的方式完成。

總結一下,它不會返回,因為你必須等待幾分鍾/小時/天/年? 要計算它。

您的算法太慢而無法在合理的時間內完成,因此您需要提出另一種方法。

首先,算法必須停止檢查天真的定義(兩個除數)。 如果你檢查所有除數直到數字的平方根,並且沒有找到任何除數,則該數字為素數。 其次,如果您正在尋找范圍內的最大素數,請從該范圍的頂部開始,向下,並在找到第一個素數時立即停止。 第三,沒有必要嘗試偶數。

實現這三個更改將使您的算法及時運行。

你的算法很差。 它必須進行大量的迭代。 正如其他人已經提到的那樣,沒有意義除以偶數,因此增加2,從3開始,你可以將迭代計數減少到給定數字的平方根。 我的也不完美,但它眨眼就結束了。 我們的想法是通過將給定數除以所有找到的除數來減少迭代次數。 請自擔風險!

    long FindLargestPrimeDivisor(long number)
    {
        long largestPrimeDivisor = 1;
        while (true)
        {
            if (number % largestPrimeDivisor == 0)
            {
                number /= largestPrimeDivisor;
            }
            if (number < largestPrimeDivisor)
            {
                break;
            }
            largestPrimeDivisor++;
        }
        return largestPrimeDivisor;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM