この問題はlogを求めてもよいですが、正確に求めてみました。
38秒かかりました。
filter next() { $_ $a = 0 1 / $a } filter enumerate($init = 0) { ,($init, $_) $init += 1 } function izip_longest($a, $b, $default) { $n1 = $a.length $n2 = $b.length foreach($k in 0..(([math]::max($n1, $n2) - 1))) { if($k -lt $n1) { if($k -lt $n2) { ,($a[$k], $b[$k]) } else { ,($a[$k], $default) } } else { ,($default, $b[$k]) } } } function add_long($a, $b) { $c = 0 foreach($x in (izip_longest $a $b 0)) { ($p, $q) = $x $s = $p + $q + $c if($s -lt 10) { $s $c = 0 } else { $s - 10 $c = 1 } } if($c -eq 1) { $c } } function Fibonacci() { $a, $b = @(@(1, 0), @(1, 0)) ,$a while($true) { ,$b $a, $b = $b, (add_long $a $b) } } $watch = New-Object System.Diagnostics.Stopwatch $watch.Start(); $n = 1000 Fibonacci | enumerate 1 | foreach { ,($_[0], ($_[1] -join "")) } | where { $_[1].length -eq $n } | foreach { $_[0] } | next $watch.Stop(); $watch.Elapsed.TotalMilliSeconds / 1000 trap { continue }