【发布时间】:2011-05-22 15:33:04
【问题描述】:
我在这个网站上找到了 Eratosthenes 筛子的 LINQ 实现。我了解筛子的基本概念,但有一个细节我不明白。第一个 Enumerable.Range(0,168) 的作用是什么?
List<int> erathostheness = Enumerable.Range(0, 168)
.Aggregate(Enumerable.Range(2, 1000000).ToList(), (result, index) =>
{
result.RemoveAll(i => i > result[index] && i % result[index] == 0);
return result;
}).ToList();
【问题讨论】:
-
这不是埃拉托色尼筛法,它只会使用加法从数组中剔除合数; 它是一个试除素筛,因为它通过试除和测试非零余数来消除一个范围内的合数。它是一种优化版本,因为它只除以找到的素数。这不是一个精确的优化,因为它至少需要估计到范围平方根的素数数量(因为 168 是范围 1000000 到 1000 的素数数量)。更好的版本是here。
标签: c# linq sieve-of-eratosthenes