我调试了我的代码,一切都很完美。但是我的代码由于某种原因从未写入控制台。
这是我的代码:
long largest = 0;
for (long i = 1; i < 600851475144; i++)
{
long check = 0;
for (long j = 1; j < i + 1; j++)
{
if ((i%j) == 0)
{
check++;
}
}
if (check == 2)
{
largest = i;
}
}
Console.WriteLine(largest);
Console.ReadKey();
问题:如何写入控制台?
答案 0 :(得分:0)
什么?
它会完成,但它会永远持续下去,因为它必须做的所有迭代。
Prime搜索计算是一项非常密集的计算,特别是以您的方式完成。
总结一下,它不会返回,因为你必须等待几分钟/小时/天/年?计算它。
答案 1 :(得分:0)
您的算法太慢而无法在合理的时间内完成,因此您需要提出另一种方法。
首先,算法必须停止检查天真的定义(两个除数)。如果你检查所有除数直到数字的平方根,并且没有找到任何除数,则该数字为素数。其次,如果您正在寻找范围内的最大素数,请从该范围的顶部开始,向下,并在找到第一个素数时立即停止。第三,没有必要尝试偶数。
实施这三项更改将使您的算法及时运行。
答案 2 :(得分:0)
你的算法很差。它必须进行大量的迭代。正如其他人已经提到的那样,没有意义除以偶数,因此增加2,从3开始,你可以将迭代计数减少到给定数字的平方根。我的也不完美,但它眨眼就结束了。我们的想法是通过将给定数除以所有找到的除数来减少迭代次数。 请自担风险!
long FindLargestPrimeDivisor(long number)
{
long largestPrimeDivisor = 1;
while (true)
{
if (number % largestPrimeDivisor == 0)
{
number /= largestPrimeDivisor;
}
if (number < largestPrimeDivisor)
{
break;
}
largestPrimeDivisor++;
}
return largestPrimeDivisor;
}