package main
import (
"fmt"
"math"
)
/*
* 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 print it only once.
* - This method is much faster than checking all numbers from 1 to n.
*/
func findDivisors(n int) []int {
limit := int(math.Sqrt(float64(n)))
divisors := []int{} // store all divisors
for i := 1; i <= limit; i++ {
if n % i == 0 {
// Add i
divisors = append(divisors, i)
// Add n/i only if it's different
if i != n / i {
divisors = append(divisors, n/i)
}
}
}
return divisors
}
func main() {
num := 24
result := findDivisors(num)
fmt.Printf("Divisors of %d: [", num)
for i := 0; i < len(result); i++ {
fmt.Print(result[i])
if i+1 < len(result) {
fmt.Print(", ")
}
}
fmt.Println("]")
}
/*
run:
Divisors of 24: [1, 24, 2, 12, 3, 8, 4, 6]
*/