Rubyで4乗的ガウスを解く方法


 1から40までの整数の4乗の和をプログラムで算出してみました。

 1⁴ + 2⁴ + 3⁴ + ........ + 40⁴

 上記の計算の結果をプログラムで出したいということです。

 僕は最終的に以下のコードでこの問題を解きました。
 答えは「21781332」です。

count = 1
sum = 0
while count <= 40
  sum += count**4
  count += 1
end
puts sum

 では答えを出した手順を以下の流れで説明したいと思います。

  1. 少ない数字で試してみた
  2. ひとまず40回繰り返し処理をしてみた
  3. 40回目の総和だけを算出できるようにしてみた
  4. whileを使ったやり方を試してみた

1. 少ない数字で試してみる

 まずは試しに1から3までの4条の和を出してみました。

num = 1**4 + 2**4 + 3**4
puts num

 これで1と16と81の合計である「98」を出せることが分かりました。

2. ひとまず40回繰り返し処理をしてみた

 あとは上記の計算を40回繰り返せばいいだけだと考えました。

num = 0
40.times do |i|
  num += (i+1)**4
  puts num
end

 これで40回分の総和が算出されるようになり、「21781332」という結果も出せます。

3. 40回目の総和だけを算出できるようにしてみた

 ここからはおまけです。上記のコードでは1回目から40回目までの総和が全て出力されます。そこで40回目の総和だけを出力させるコードにしたい場合も考えてみました。

num = 0
40.times do |timesCount|
  n = timesCount + 1
  num += n**4
  if n == 40
    puts num
  end
end

 「timesCount」を用いて処理の回数を数えて、40回目の時だけ総和を出力させる形です。

4. whileを使ったやり方を試してみた。

 上記までのやり方で問題はなさそうですが、理解を深める目的で他のやり方も試してみました。whileを使って実装し、分かりやすくするために変数名も変えてみました。

count = 1
sum = 0
while count <= 40
  sum += count**4
  if count == 40
    puts sum
  end
  count += 1
end

 こちらの方がわかりやすいかなと思います。ただ僕はまだまだ勉強不足であるため、もっと可読性の高いコードを追求できるはずです。

※追記

count = 1
sum = 0
while count <= 40
  sum += count**4
  count += 1
end
puts sum

 if文を使わなくても「puts sum」をwhileから追い出すだけで40回目の総和を出せます!初歩的なミスでした。コメント欄でさらにシンプルなコードを教えていただいているので、参考にしてください!

 またこちらの記事はもともと僕が「はてなブログ」で書いていた記事です。
4乗的ガウスを解く <はてなブログ>
 はてなブログで書いていた記事を随時Qiitaに移行していこうと思います。

 以上です。ご意見を頂けるとありがたいです。