import Foundation
/*
* 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.
*/
func findDivisors(_ n: Int) -> [Int] {
var divisors: [Int] = []
let limit: Int = Int(Double(n).squareRoot())
for i in 1...limit {
if n % i == 0 {
divisors.append(i) // Add the smaller divisor
let pair: Int = n / i
if i != pair {
divisors.append(pair) // Add the paired divisor
}
}
}
return divisors.sorted()
}
let num: Int = 24
let result: [Int] = findDivisors(num)
print("Divisors of \(num): [\(result.map(String.init).joined(separator: ", "))]")
/*
run:
Divisors of 24: [1, 2, 3, 4, 6, 8, 12, 24]
*/