[英]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.