сумма простых чисел проекта euler и Stream.view - PullRequest
1 голос
/ 28 февраля 2011

Глядя на решения Project Euler на http://pavelfatin.com/scala-for-project-euler/, Я был немного озадачен тем, как вид играет роль в решении задачи 10 Рассчитайте сумму всех простых чисел ниже двух миллионов. "

Предлагаемое решение:

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)(_ + _)

Может кто-нибудь объяснить мне, почему они отличаются?

1 Ответ

0 голосов
/ 07 апреля 2011
Welcome to Scala version 2.8.1.final (Java HotSpot(TM) Client VM, Java 1.6.0_24).
Type in expressions to have them evaluated.
Type :help for more information.

scala> 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)
ps: Stream[Int] = <lazy>

scala> val r = ps.view.takeWhile(_ < 2000000).foldLeft(0L)(_ + _)
r: Long = 142913828922

scala> val r = ps.takeWhile(_ < 2000000).foldLeft(0L)(_ + _)
r: Long = 142913828922
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...