【发布时间】:2016-07-25 09:03:31
【问题描述】:
这个方法应该检查一个数字是否是素数
public static bool IsPrime(this long value)
{
if (value < 2)
{
return false;
}
else
{
int boundary = (int)Math.Floor(Math.Sqrt(value));
return Enumerable.Range(2, boundary-1).AsParallel().Any(x => value % x != 0);
}
}
但并非在所有情况下都有效。例如。根据这种方法,9 是一个素数,但3x3=9 所以这是错误的。我没有看到方法中的错误。
【问题讨论】:
-
不是
AsParallel的好候选,因为操作value % x != 0并不耗时。 -
效率:该值不需要与
2以外的其他偶数进行检查。所以你可以忽略对4,6,8,10,...的检查 -
那么,赏金的原因是什么?