【やりたいこと】
Rubyで200000以下の約数の合計を出力したい。
200000の約数の合計ではなくて、200000以下の約数の合計です。
例:10の場合
1から10までの約数は以下になるので、すべて合計して、87になる。
[[1], [1, 2], [1, 3], [1, 2, 4], [1, 5], [1, 2, 3, 6], [1, 7], [1, 2, 4, 8], [1, 3, 9], [1, 2, 5, 10]]
【なにが分からないか】
任意の値で結果を出力することができたが、200000など
大きい値だと処理が重くなり出力できない。
どうにかして出力したいが、方法が分からない
ruby
1n = 200000 2i = 1 3result = [] 4 5while i <= n do 6 result << (1..i).select{ |a| 7 i % a == 0 8 } 9 i += 1 10end 11 12count = 0 13(result.length).times{ |a| 14 count += result[a].sum 15} 16puts count 17
10の例で言いたいことはわかりますが、タイトルが間違っているので、直しておいた方がいいでしょうね。
× 200000以下の約数の合計を出力したい
○ 200000以下の数の約数の合計を出力したい
Is there a formula to calculate the sum of all proper divisors of a number?
https://math.stackexchange.com/a/22723