Я пытаюсь реализовать Решето Эратосфена, используя списки и фильтры, а не массивы и циклы. Я не уверен, почему следующее работает значительно хуже, чем императивный эквивалент. 1 миллион должен лететь, но моя машина останавливается.
val max = 1000000
def filterPrimes(upper: Int, seed: Int = 2, sieve: List[Int] = List()): List[Int] =
sieve.map(x => if (x % seed == 0 && x > seed) 0 else x).filter(_ > 0)
var filtered: List[Int] = (2 to max).toList
for (i <- 2 to max / 2) filtered = filterPrimes(max, i, filtered)
filtered.foreach(println(_))