object PrimeFibonacci {
def isPrime(n: Long): Boolean = {
if (n < 2) return false
if (n == 2 || n == 3) return true
if (n % 2 == 0) return false
var i = 3L
while (i * i <= n) {
if (n % i == 0) return false
i += 2
}
true
}
def nextFib(state: Array[Long]): Long = {
val f = state(0)
val next = state(0) + state(1)
state(0) = state(1)
state(1) = next
f
}
def main(args: Array[String]): Unit = {
val fibState = Array(1L, 1L)
var count = 0
val out = new StringBuilder
while (count < 10) {
val f = nextFib(fibState)
if (isPrime(f)) {
out.append(f).append(" ")
count += 1
}
}
println(out.toString)
}
}
/*
run:
2 3 5 13 89 233 1597 28657 514229 433494437
*/