``` fun generatePrimes(until: Int): List<Int&gt...
# announcements
r
Copy code
fun 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()
}