1から40までの整数の4乗の和をプログラムで算出してみました。
1⁴ + 2⁴ + 3⁴ + ........ + 40⁴
上記の計算の結果をプログラムで出したいということです。
僕は最終的に以下のコードでこの問題を解きました。
答えは「21781332」です。
count = 1
sum = 0
while count <= 40
sum += count**4
count += 1
end
puts sum
では答えを出した手順を以下の流れで説明したいと思います。
- 少ない数字で試してみた
- ひとまず40回繰り返し処理をしてみた
- 40回目の総和だけを算出できるようにしてみた
- 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に移行していこうと思います。
以上です。ご意見を頂けるとありがたいです。