2014-01-30 17 views
0

我正在学习PLINQ。我试着在一个网站上给出的例子。但是,我可以看到结果是错误的,而且当我多次重新运行程序时也会有所不同。首先它不会给出所有素数,其次它只给出9591个随机素数。PLINQ结果是错误的,并在不同的运行中有所不同

IEnumerable<int> numbers = Enumerable.Range (3, 100000-3); 

var parallelQuery = 
    from n in numbers.AsParallel() 
    where Enumerable.Range (2, (int) Math.Sqrt (n)).All (i => n % i > 0) 
    select n; 

int[] primes = parallelQuery.ToArray(); 

感谢任何帮助!

+1

它以何种方式变化?数字的顺序可能会有所不同,因为您没有对它们进行排序。 – Kaerber

+0

从3到(100000-3),有超过9591的素数,但它只显示9591个素数,而不是休息。 –

+0

你范围不包括2,看我的答案。 – Kaerber

回答

7

在100,000以下有9592个素数,而且你的范围不包括2,这是一个素数。

质数的顺序会有所不同,因为您不会对它们进行排序,也无法控制PLINQ如何将工作分解为并行块。

+0

谢谢卡伯。我正在比较PLINQ和传统线程。在我的传统线程逻辑中,出现了一些问题,所以我出错了(更多的素数,即冗余)结果。 –

相关问题