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