簡體   English   中英

我的程序是否花費了太多時間來執行?

[英]Is my program taking too much time to execute?

我想解決歐拉項目中關於尋找大數中最大質數的問題。 我在 Visual Studio 2012 的虛擬機上運行我的代碼,代碼似乎凍結了。 當我進入循環時,代碼運行良好,但是當我執行它時,控制台總是在那里。 就好像程序還在運行一樣。 可能是程序需要時間來執行?

我的代碼

static void Main(string[] args)
{
    long number = 5;

    for (long i = 1; i < 600851475143; i++)
    {
        if (i % 2 != 0 && i % 1 == 0 && i % i == 0)
            number = i;
    }

}

我運行了這段代碼,它確實需要一段時間才能運行,但它似乎確實在進步(我確實在增加)。 試試這個來確定 i 是否是素數:

    public static bool IsPrime(long candidate)
    {
        // Test whether the parameter is a prime number.
        if ((candidate & 1) == 0)
        {
            return candidate == 2;
        }
        // Note:
        // ... This version was changed to test the square.
        // ... Original version tested against the square root.
        // ... Also we exclude 1 at the very end.
        for (int i = 3; (i * i) <= candidate; i += 2)
        {
            if ((candidate % i) == 0)
            {
                return false;
            }
        }
        return candidate != 1;
    }

我不能為此聲稱功勞。 它來自http://www.dotnetperls.com/prime

將一些 Console.WriteLines 添加到您的主要方法以了解其進度:

    static void Main(string[] args)
    {
        long number = 5;

        for (long i = 1; i < 600851475143; i++)
        {
            if (IsPrime(i))
            {
                Console.WriteLine(i);
                number = i;
            }
        }
    }

這些算法還有其他資源: http : //csharpinoneroom.blogspot.com/2008/03/find-prime-numer-at-fastest-speed.html

祝你好運!

你的算法不正確。 這是一個簡單的方法來找到一個合數的質因數,適用於 Project Euler:

function factors(n)
    f := 2
    while f * f <= n
        if n % f == 0
            output f
            n := n / f
        else
            f := f + 1
    output n

這是通過將n除以每個f來工作,減少n並在找到質因子時輸出f 最后一個因素是剩余的n,f是大於n的平方根時,在該點n必須是素數。

還有其他方法可以分解整數。 當你准備好更多時,我謙虛地在我的博客上推薦這篇文章

最終,如果它不能正常工作,你是否編寫世界上最快的代碼並不重要。 你的沒有,除了速度。

暫無
暫無

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

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