【发布时间】:2020-10-29 14:29:02
【问题描述】:
我正在开发一个程序,该程序跟踪将所有素数的总和达到某个数字所需的时间,并试图找到获得该值的最有效方法,因为我有一个秒表(System.Diagnostics) 跟踪需要多长时间。目前,我可以使用以下代码在大约 33-34 秒内找到最多 40,000 的所有素数的总和:
private void ListThePrimes()
{
prime = false;
while (primes < 30000)
{
for (int i = 2; i < n; i++)
{
output = n % i;
if (output == 0)
{
primeNum = i;
prime = false;
break;
}
else
{
prime = true;
}
}
if (prime == true)
{
sum += primeNum;
primes++;
}
n++;
}
}
但是,我觉得有一种方法可以更有效地编写此代码,因为我的目标是在相同的时间内使用更高的数字(例如 200,000 左右)。这是我的秒表代码,如果需要,我会在单击按钮时执行:
var timer = new Stopwatch();
timer.Start();
ListThePrimes();
timer.Stop();
TimeSpan timeTaken = timer.Elapsed;
string foo = timeTaken.ToString(@"m\:ss\.fff");
MessageBox.Show("The sum is " + sum + ". It took this program " + foo + " seconds to run.");
如果有人能告诉我是否有更有效的方法来执行此操作,我们将不胜感激。
【问题讨论】:
-
查找“Erathostenes sieve”