2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-06-26

 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に移行していこうと思います。

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

2
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?