我的程序是否需要花费太多时间来执行?

时间:2012-11-08 04:41:19

标签: c# .net algorithm

我想解决项目euleur关于找到大数字的最大素数的问题。我在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;
    }

}

3 个答案:

答案 0 :(得分:2)

我运行了这段代码,它确实需要一段时间才能运行,但它似乎确实在进步(我确实在增加)。试试这个以确定我是否是素数:

    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

祝你好运!

答案 1 :(得分:0)

您的算法不正确。这是一种查找复合数的素因子的简单方法,适用于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 因素被发现。当 f 大于 n 的平方根时,最后一个因素是剩余的 n ,此时 n 必须是素数。

还有其他方法来计算整数。当您准备好了更多时,我在我的博客上谦虚地推荐这个essay

答案 2 :(得分:-2)

最终,如果您编写世界上最快的代码,如果它无法正常工作,则无关紧要。你没有,速度快。