import kotlin.math.sqrt
/*
* Function: findDivisors
* Purpose: Efficiently find all divisors of a number using sqrt(n).
*
* Explanation:
* - We loop only up to sqrt(n), which reduces the number of iterations.
* - If i divides n, then both i and n / i are divisors.
* - If i == n / i (perfect square), we add it only once.
* - Finally, we sort the list so the divisors appear in ascending order.
*/
fun findDivisors(n: Int): List<Int> {
val divisors: MutableList<Int> = mutableListOf()
val limit: Int = sqrt(n.toDouble()).toInt()
for (i: Int in 1..limit) {
if (n % i == 0) {
divisors.add(i) // Add the smaller divisor
val pair: Int = n / i
if (i != pair) {
divisors.add(pair) // Add the paired divisor
}
}
}
return divisors.sorted()
}
fun main() {
val num: Int = 24
val result: List<Int> = findDivisors(num)
println("Divisors of $num: [${result.joinToString(", ")}]")
}
/*
run:
Divisors of 24: [1, 2, 3, 4, 6, 8, 12, 24]
*/