为了解决欧拉项目问题5,我编写了以下程序:
class p5
{
const int maxNumber = 20;
static void Main(string[] args)
{
Job(); // First warm-up call to avoid Jit latency
var sw = Stopwatch.StartNew();
var result = Job();
sw.Stop();
Debug.Assert(result == 232792560);
Console.WriteLine(result);
Console.WriteLine(sw.Elapsed);
Console.ReadLine();
}
private static int Job()
{
var result = Enumerable.Range(1, int.MaxValue - 1)
.Where(
n => Enumerable.Range(maxNumber / 2 + 1, maxNumber / 2).All(c => n % c == 0)
).First();
return result;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我发现它有点长(17秒,处于释放模式),即使它正在工作.
有没有可能的优化?
仅供参考,我尝试了AsParallel方法,但正如预期的那样,大量的工作太小而且上下文切换比利益更重(超过1分钟): …