/*
* Function: findDivisors
* Purpose: Efficiently find all divisors of a number using sqrt(n).
*
* Explanation:
* - We loop only up to Math.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.
*/
function findDivisors(n: number): number[] {
const divisors: number[] = [];
const limit: number = Math.floor(Math.sqrt(n));
for (let i: number = 1; i <= limit; i++) {
if (n % i === 0) {
divisors.push(i); // Add the smaller divisor
if (i !== n / i) {
divisors.push(n / i); // Add the paired divisor
}
}
}
divisors.sort((a: number, b: number) => a - b);
return divisors;
}
const num: number = 24;
const result: number[] = findDivisors(num);
console.log(`Divisors of ${num}: [${result.join(", ")}]`);
/*
run:
Divisors of 24: [1, 2, 3, 4, 6, 8, 12, 24]
*/