30 lines
892 B
Text
30 lines
892 B
Text
fun isPrime(n: Int) : Boolean {
|
|
if (n < 2) return false
|
|
if (n % 2 == 0) return n == 2
|
|
if (n % 3 == 0) return n == 3
|
|
var d : Int = 5
|
|
while (d * d <= n) {
|
|
if (n % d == 0) return false
|
|
d += 2
|
|
if (n % d == 0) return false
|
|
d += 4
|
|
}
|
|
return true
|
|
}
|
|
|
|
fun generatePrimes() = sequence {
|
|
yield(2)
|
|
var p = 3
|
|
while (p <= Int.MAX_VALUE) {
|
|
if (isPrime(p)) yield(p)
|
|
p += 2
|
|
}
|
|
}
|
|
|
|
fun main(args: Array<String>) {
|
|
val primes = generatePrimes().take(10000) // generate first 10,000 primes
|
|
println("First 20 primes : ${primes.take(20).toList()}")
|
|
println("Primes between 100 and 150 : ${primes.filter { it in 100..150 }.toList()}")
|
|
println("Number of primes between 7700 and 8000 = ${primes.filter { it in 7700..8000 }.count()}")
|
|
println("10,000th prime = ${primes.last()}")
|
|
}
|