检查 Prime 扩展

Check Prime Extension

此方法应检查一个数是否为质数

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 是错误的。我没有看到方法中的错误。

您可以试试下面的代码,效率更高:

  var primes = Enumerable.Range(1, 20)
    .Where(i => i != 1 && !Enumerable.Range(2, i - 2).Any(j => i % j == 0));

忽略这不是与 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()

反转条件:

return !Enumerable.Range(2, boundary - 1).AsParallel().Any(x => value % x == 0);