Windows PowerShellでProject Euler(16)

Problem 10

単なるエラトステネスのふるいですが、さすがに遅いです。今回は時間測定しました。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