Finding all factors of an integer

I found this question but it didn’t quite answer mine.

I want to list all the factors of a number, n. I found Primes.factor(n) which returns all the primes with their powers. And I found Iterators.product which could, in principle, give all the factors.

In Python, there’s an * operator that breaks out a list into separate inputs.

I created an array like this:

a = []
for p in Primes.factor(n)
    append!(a,[0:p[2])
end

Then I wanted to iterate over all combinations of these powers:

for x in Iterators.product(*a)
    #Do stuff with x being an array or tuple or list or whatever of powers
end

But I guess * is a python thing! Anyway, general hints, tips, and good ideas for how to do this in Julia?

I’m not sure I understand your question correcty, but I think you’re looking for splatting:

Iterators.product(a...)

for example:

julia> a = [0:1, 0:2]
2-element Array{UnitRange{Int64},1}:
 0:1
 0:2

julia> collect(Iterators.product(a...))
2×3 Array{Tuple{Int64,Int64},2}:
 (0, 0)  (0, 1)  (0, 2)
 (1, 0)  (1, 1)  (1, 2)

I’m not sure why you’re using the collect? But the splat seems to do exactly what I was looking for. Thank you for your help.

Sorry the collect was just to show what’s in the iterator, clearly you don’t have to materialise for your use case!

you might also be interrested in these methods for factor:

julia> factor(Set, 12)
Set{Int64} with 2 elements:
  2
  3

julia> factor(Vector, 12)
3-element Array{Int64,1}:
 2
 2
 3

julia> factor(Dict, 12)
Dict{Int64,Int64} with 2 entries:
  2 => 2
  3 => 1