約数の出力
haruyaさんのコード(http://d.hatena.ne.jp/haruya12/20150918/1442570781)
がシンプルで勉強になった。
require 'prime'
def d(m, k)
return m unless @factor[k]
(0..@factor[k][1]).map{|e| d(m * @factor[k][0] ** e, k + 1)}.flatten
end
n = 630
# 順番を逆にする方が後の結果が綺麗になる
@factor = Prime.prime_division(n).reverse
p @factor
p d(1, 0)
p d(1, n % 2 == 0 ? 1 : 0)
p d(1, n % 3 == 0 ? 2 : 0)
p d(1, n % 5 == 0 ? 3 : 0)
p d(1, n % 7 == 0 ? 4 : 0)
[[7, 1], [5, 1], [3, 2], [2, 1]]
[1, 2, 3, 6, 9, 18, 5, 10, 15, 30, 45, 90, 7, 14, 21, 42, 63, 126, 35, 70, 105, 210, 315, 630]
[1, 2, 3, 6, 9, 18, 5, 10, 15, 30, 45, 90]
[1, 2, 3, 6, 9, 18]
[1, 2]
1
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。