[英]Why does my program for finding the largest prime never writes to console?
我調試了我的代碼,一切都很完美。 但是我的代碼由於某種原因從未寫入控制台。
這是我的代碼:
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();
問題:如何寫入控制台?
什么?
它將完成,但它將永遠持續,因為它必須做的所有迭代。
尋找計算是一項非常密集的計算,特別是以您的方式完成。
總結一下,它不會返回,因為你必須等待幾分鍾/小時/天/年? 要計算它。
您的算法太慢而無法在合理的時間內完成,因此您需要提出另一種方法。
首先,算法必須停止檢查天真的定義(兩個除數)。 如果你檢查所有除數直到數字的平方根,並且沒有找到任何除數,則該數字為素數。 其次,如果您正在尋找范圍內的最大素數,請從該范圍的頂部開始,向下,並在找到第一個素數時立即停止。 第三,沒有必要嘗試偶數。
實現這三個更改將使您的算法及時運行。
你的算法很差。 它必須進行大量的迭代。 正如其他人已經提到的那樣,沒有意義除以偶數,因此增加2,從3開始,你可以將迭代計數減少到給定數字的平方根。 我的也不完美,但它眨眼就結束了。 我們的想法是通過將給定數除以所有找到的除數來減少迭代次數。 請自擔風險!
long FindLargestPrimeDivisor(long number)
{
long largestPrimeDivisor = 1;
while (true)
{
if (number % largestPrimeDivisor == 0)
{
number /= largestPrimeDivisor;
}
if (number < largestPrimeDivisor)
{
break;
}
largestPrimeDivisor++;
}
return largestPrimeDivisor;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.