単なるエラトステネスのふるいですが、さすがに遅いです。今回は時間測定しました。10分かかりました。
function make_primes($N) { $a = (0..$N | foreach { $true }) foreach($p in (2..$N | where { $a[$_] })) { for($m = $p * $p; $m -le $N; $m += $p) { $a[$m] = $false } } 2..$N | where { $a[$_] } } $watch = New-Object System.Diagnostics.Stopwatch $watch.Start(); $N = 2000000 (make_primes($N - 1) | measure -Sum).sum $watch.Stop(); $watch.Elapsed.TotalMilliSeconds / 1000