Scala で素数のリスト

Scalaでエラトステネスの篩を参考に Scala 2.10 向けにアレンジして書いてみた。しかし効率は良くないようで、10000 個くらいの素数を取得しようとするとあっという間に OutOfMemory になる。

object Prime {
  def primes: Stream[Int] = {
    def sieve(xs: Stream[Int]): Stream[Int] =
      xs.head #:: sieve(xs.tail.filter(_ % xs.head != 0))
    sieve(Stream.from(2))
  }

  def main(args: Array[String]): Unit = {
    primes.take(20).foreach { println }
  }
}