標準の Iterator#takeWhile が遅いようだ。
takeWhile を自作すれば速くなるが、やりすぎか?

def myTakeWhile[A](it: Iterator[A], p: A => Boolean) = new Iterator[A] {
 private var cached = false
 private var nextCache: A = _
 private var hasNextCache = false
 def hasNext = {
  if (!cached) {
   cached = true
   if (it.hasNext) { nextCache = it.next; hasNextCache = p(nextCache) }
   else hasNextCache = false
  }
  hasNextCache
 }
 def next =
  if (hasNext) { cached = false; nextCache }
  else throw new NoSuchElementException("next on empty iterator")
}
def main(args: Array[String]) {
 val primes = new ArrayBuffer[Int]
 for {
  i <- 2 until args(0).toInt
  if !myTakeWhile[Int](primes.elements, (_ <= (Math sqrt i))).exists(i % _ == 0)
 } primes += i
}