Проверка, содержит ли упорядоченный бесконечный поток значение

У меня есть бесконечный поток простых чисел primeStream (начиная с 2 и увеличиваясь). У меня также есть еще один поток Ints s , который увеличивается по величине, и я хочу проверить, является ли каждый из них простым.

Каков эффективный способ сделать это? Я мог бы определить

def isPrime(n: Int) = n == primeStream.dropWhile(_ < n).head

, но это кажется неэффективным, поскольку каждый раз нужно перебирать весь поток.

Реализация primeStream (бесстыдно скопировано из другого источника):

  val primeStream: Stream[Int] =
  2 #:: primeStream.map{ i =>
    Stream.from(i + 1)
    .find{ j =>
      primeStream.takeWhile{ k => k * k <= j }
        .forall{ j % _ > 0 }
    }.get
  }
5
задан Luigi a.k.a. Rhys 28 September 2011 в 19:35
поделиться