約数の総和を算出する

 ある整数の約数の総和を算出するプログラムを作ってみました。また一定の条件下での約数の和も出せるようにしていきたいと思います。コードのインデントは整っていないのでごめんなさい。

 

  1. 約数を表示させる
  2. 約数を足し合わせる
  3. 1000以下の約数の和を出してみる
  4. 条件の指定を決められるようにする

 

 以上の流れで進めていきます。

 

1. 約数を表示させる

 まず約数を表示させるプログラムから作ってみようと思いました。とりあえず割り切れる値を出す際は「%」が使えそうですね。

def divisor(num)
i = 1
while i <= num
a = num % i
if a == 0
puts i
end
i += 1
end
end

puts "整数を入力してください"
num = gets.to_i
divisor(num)

 gets.to_iで入力した値をnumとして、1からnumまで繰り返し割り算をし続けて割り切れた場合はその時のiの値を出力するようにしてみました。45を入力した場合は1から45まで割り算をして、割り切れた値である「1、3、5、9、15、45」だけが出力されました。

 

2. 約数を足し合わせる

 では約数の合計を出したいと思います。割り切れた時だけ配列に値を格納していき、sumを使って配列の合計を出すやり方にしてみました。また変数名をもう少し分かりやすいようにしてみました。

def divisor(num)
divisible =
i = 1
while i <= num
divisible_or = num % i
if divisible_or == 0
divisible << i
end
i += 1
end
puts divisible.sum
end

puts "整数を入力してください"
num = gets.to_i
divisor(num)

 これで45を入力した場合は「1、3、5、9、15、45」の合計である78が出力されるようになりました。

 

3. 1000以下の約数の和を出してみる

 では今度は約数の総和とは別に、特定の条件における約数の和も出せるようにしたいと思います。それでは、まず具体的な数字を使って試してみます。1000以下の約数の和も出せるプログラムを作ってみます。

def divisor(num)
divisible =
divisible_1000_less =
i = 1
while i <= num
divisible_or = num % i
if divisible_or == 0
puts i
divisible << i
if i <= 1000
divisible_1000_less << i
end
end
i += 1
end
puts "約数の総和は#{divisible.sum}です"
puts "1000以下の約数の和は#{divisible_1000_less.sum}です"
end

puts "整数を入力してください"
num = gets.to_i
divisor(num)

 可読性や変数名のネーミングセンスには問題があるかもしれませんが、これでひとまず1000以下の約数の和も出せるようになりました。iが1000以下だった場合は別の配列にもiを格納するようにして合計を出しています。

 例えば12600を入力した場合、「48360」という約数の総和と、「10405」という1000以下の約数の和が算出されます。

 

4. 条件の指定を決められるようにする

 上記のコードでは1000以下に条件が限定されてしまっているため、今度は自分で条件を指定できるようにします。またついでに約数の数も出せるようにしてみました。

def divisor(num, range)
divisible =
divisible_range = []
i = 1
while i <= num
divisible_or = num % i
if divisible_or == 0
puts i
divisible << i
if i <= range
divisible_range << i
end
end
i += 1
end
puts "約数の数は#{divisible.length}です"
puts "約数の総和は#{divisible.sum}です"
puts "#{range}以下の約数の和は#{divisible_range.sum}です"
end

puts "約数の総和を出したい整数を入力してください"
num = gets.to_i
puts "求めたい約数の和の範囲を指定してください"
range = gets.to_i
divisor(num, range)

 これで問題なくコードを実行できました。実行結果は以下のようになります。

約数の総和を出したい整数を入力してください
45
求めたい約数の和の範囲を指定してください
15
1
3
5
9
15
45
約数の数は6です
約数の総和は78です
15以下の約数の和は33です

 可読性はもっと高められそうですが、とりあえずここまでにしておきます。