Это код Ruby.
require 'prime'
def divisors(n)
arr = Prime.prime_division(n).map { |v,exp| (0..exp).map { |i| v**i } }
arr.first.product(*arr[1..-1]).map { |a| a.reduce(:*) }.map { |m| [m,n/m] }
end
Например,
divisors 24
#=> [[1, 24], [3, 8], [2, 12], [6, 4], [4, 6], [12, 2], [8, 3], [24, 1]]
divisors 9
#=> [[1, 9], [3, 3], [9, 1]]
divisors 450
#=> [[1, 450], [5, 90], [25, 18], [3, 150], [15, 30], [75, 6], [9, 50],
# [45, 10], [225, 2], [2, 225], [10, 45], [50, 9], [6, 75], [30, 15],
# [150, 3], [18, 25], [90, 5], [450, 1]]
Для n = 24, шаги следующие:
a = Prime.prime_division(n)
#=> [[2, 3], [3, 1]]
arr = a.map { |v,exp| (0..exp).map { |i| v**i } }
#=> [[1, 2, 4, 8], [1, 3]]
b = arr.shift
#=> [1, 2, 4, 8]
arr
#=> [[1, 3]]
c = b.product(*arr)
#=> [[1, 1], [1, 3], [2, 1], [2, 3], [4, 1], [4, 3], [8, 1], [8, 3]]
d = c.map { |a| a.reduce(:*) }
#=> [1, 3, 2, 6, 4, 12, 8, 24]
Наконец,
d.map { |m| [m,n/m] }
возвращает указанный выше массив.