У меня есть бесконечный поток простых чисел 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
}