2014-01-30 27 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和傳統線程。在我的傳統線程邏輯中,出現了一些問題,所以我出錯了(更多的素數,即冗餘)結果。 –

相關問題