package factors // Factors returns a number's factors as a slice. // The slice is not guaranteed to be in sorted order. func Factors(n uint) []uint { if n == 0 { panic("Cannot get factors of 0!") } primeFactorization := PrimeFactorize(n) factors := []uint{1} for p, e := range primeFactorization.exponents { next_factors := make([]uint, 0, len(factors)*int(e)) for _, factor := range factors { for i := uint(0); i <= e; i++ { multiplier := uint(1) for j := uint(0); j < i; j++ { multiplier *= p } next_factors = append(next_factors, factor*multiplier) } } factors = next_factors } return factors }