約数を求める(Ruby)
prime ライブラリを使う。結果は順不同。
require "prime" def divisors(n) result = [1] doit = ->(pd, acc) { return if pd.empty? x, *xs = pd (0..x[1]).each do |i| e = acc * x[0] ** i result << e doit.(xs, e) end } doit.(n.prime_division, 1) result.uniq end p divisors(24) #=>[1, 3, 2, 6, 4, 12, 8, 24]