繁体   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