こちらのエントリ もしぼくが採用するなら を読んで、エラトステネスの篩は知ってはいるものの実装してみたことないなぁと思い、 Scalaで実装してみました。 Wikipediaの例題を参考に作ってみます。 考え方としては自然数の集合に対して、小さい順からその倍数を削除していって、 残ったものが素数、という考えです。 最初、こんな感じで実装してみました。 末尾再帰じゃないバージョン1 2 3 4 5 6 7 8 9 10 11 12 13 def sieveOfEratosthenes(numbers: List[Int]): List[Int] = { numbers match { case Nil => Nil case 1 :: tail => sieveOfEratosthenes(tail) case head :: tail => head :: sieveOfEratosthe