1
在http://pavelfatin.com/scala-for-project-euler/看着歐拉項目的解決方案,我對「問題10 」的解決方案如何發揮作用感到有點困惑。計算所有的總和低於200萬的素數。「euler project sum-of-primes和Stream.view
提出的解決方案是:
lazy val ps: Stream[Int] = 2 #:: ps.map(i => Stream.from(i + 1).find(
j => ps.takeWhile(k => k * k <= j).forall(j % _ > 0)).get)
val r = ps.view.takeWhile(_ < 2000000).foldLeft(0L)(_ + _)
...這會導致142913828922
我注意到你得到一個不同的結果,1179908154
,如果你離開了看法:
val r = ps.takeWhile(_ < 2000000).foldLeft(0L)(_ + _)
有人可以向我解釋爲什麼這些不同嗎?
我想這是一個錯誤...似乎流是一個「高維護日期」。 – 2011-02-28 01:22:22
scala版本是什麼?我在2.8.0和2.8.1中獲得了142913828922的視圖和非視圖版本... – huynhjl 2011-02-28 02:56:49
$ scala -version Scala代碼運行器版本2.8.1.final - Copyright 2002-2010,LAMP/EPFL $ java -version Java版本「1.6.0_22」 Java™SE運行時環境(版本1.6.0_22-b04-307-10M3261) Java HotSpot™64位服務器VM(版本17.1-b03-307,混合模式) – 2011-02-28 07:13:36