我想解决项目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;
}
}
答案 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)
最终,如果您编写世界上最快的代码,如果它无法正常工作,则无关紧要。你没有,速度快。