redrield
09/20/2017, 11:20 PMfun generatePrimes(until: Int): List<Int> {
val prime = BooleanArray(until + 1)
prime[2] = true
prime[3] = true
val root = until.sqrt().ceil()
for(x in 1 until root) {
for(y in 1 until root) {
var n = 4 * x * x + y * y
if(n <= until && (n % 12 == 1 || n % 12 == 5)) {
prime[n] = !prime[n]
}
n = 3 * x * x + y * y
if(n <= until && n % 12 == 7) {
prime[n] = !prime[n]
}
if(x > y && n <= until && n % 12 == 11) {
prime[n] = !prime[n]
}
}
}
for(i in 5..root) {
if(prime[i]) {
// var j = i * i
// while (j < until) {
// prime[j] = false
// j += i * i
// }
for(j in (i * i) until until step (i * i)) {
prime[j] = false
}
}
}
// (5..root)
// .filter { prime[it] }
// .flatMap { (it * it)..until step (it * it) }
// .forEach { prime[it] = false }
return (0..until).filter { prime[it] }.toList()
}