static List<long> primes
在某个点之前,我有一个所有已知的素数,以及这样的函数:
static bool isPrime(long p)
{
double rootP = Math.Sqrt(p);
foreach (long q in primes)
{
if (p % q == 0)
return false;
if (q >= rootP)
return true;
}
return true;
}
可以这样并行化:
static bool isPrime(long p)
{
double rootP = Math.Sqrt(p);
primes.AsParallel().ForAll(q =>
{
if (p % q == 0)
return false;
if (q > rootP)
break;
});
return true;
}
但是,这会产生一个编译时错误,说明我的块中的某些返回类型不能隐式转换为委托返回类型。
我对 LINQ 有点陌生,尤其是 PLINQ。对我来说,这似乎是并行性的一个很好的候选,因为每个已知素数与候选素数的检查是一个独立的过程。
有没有一种简单的方法可以修复我的块以使其正常工作,还是我需要以完全不同的方式解决这个问题?