Почему мой алгоритм Sieve работает так медленно в Scala?

Я пытаюсь реализовать Решето Эратосфена, используя списки и фильтры, а не массивы и циклы. Я не уверен, почему следующее работает значительно хуже, чем императивный эквивалент. 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(_))
8
задан Dan Burton 27 October 2011 в 17:56
поделиться