【发布时间】:2015-10-20 16:53:45
【问题描述】:
这些天我对 LINQ 很感兴趣。我正在尝试获取质数。我实际上做得很好,但我的代码没有显示低于 Sqrt(n) 的素数。
static void Main(string[] args)
{
Func<int, int, IEnumerable<int>> EnumerableRange =
(startPoint, endPoint) =>
Enumerable.Range(Math.Min(startPoint, endPoint), Math.Abs(startPoint - endPoint) + 1);
Func<int, int, bool> isFullyDivided =
(value, divisor) =>
(value % divisor).Equals(0);
int sp = 2,
ep = 100;
var query =
EnumerableRange(sp, ep)
.Where(value =>
EnumerableRange(2, (int)Math.Ceiling(Math.Sqrt(ep)))
.Any(divisor =>
isFullyDivided(value, divisor))
);
var primeNumbers =
EnumerableRange(sp, ep)
.Except(query);
foreach (var item in primeNumbers)
{
Console
.WriteLine(item);
}
Console
.Read();
}
目前,此代码错误地忽略了小于sqrt(n) 的素数。该代码应该得到 2 到 100 之间的素数。相反,它只打印 11 及以上的素数。缺少素数 2, 3, 5, 7。
【问题讨论】:
-
您能否更具体地说明您的代码是如何不工作的?
-
以下代码表示素数 11 及以上。 11 以下,即 2、3、5、7 缺失。