此方法应检查一个数字是否为质数
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,所以它是错误的。我看不出这个方法有什么错误。
发布于 2016-07-25 17:11:20
忽略了这不能用于AsParallel()这一事实,您的问题是
return Enumerable.Range(2, boundary - 1).AsParallel().Any(x => value % x != 0);应该是
return Enumerable.Range(2, boundary - 1).AsParallel().All(x => value % x != 0);您应该一直在使用.All(),而不是.Any()。
发布于 2016-07-25 17:17:34
反转条件:
return !Enumerable.Range(2, boundary - 1).AsParallel().Any(x => value % x == 0);发布于 2016-07-25 17:09:01
您可以尝试以下更高效的代码:
var primes = Enumerable.Range(1, 20)
.Where(i => i != 1 && !Enumerable.Range(2, i - 2).Any(j => i % j == 0));https://stackoverflow.com/questions/38563591
复制相似问题