はじめに
【Project Euler】とは、プログラミングで解く数学の問題集です。
本投稿では初学者なりに、Problem2 を解くにあたっての考え方を解説しています。
ちなみに言語はRubyを用いています。
※本投稿は、Project Eulerのガイドラインに従い、解答例としてのコードは載せておりません。
また、問題に関しては私が翻訳しています。ミスがあればご指摘ください。
【Project Euler】について知りたい方はこちらから↓
問題(original ver.)
Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.
問題(翻訳ver.)
フィボナッチ数列の項は、直前の2つの項を足したものになる。最初の二項をそれぞれ1,2だとすると、最初の10項は以下のようになる。
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
フィボナッチ数列の項の値が400万以下である時、偶数の項の総和はいくつになるか計算せよ。
問題を解く上でのヒント
①問題にある通り、この数列の項は直前の2つの項の足し算で表されます。ということは、3項目=1項目+2項目 と表現されます。
その次は4項目=2項目+3項目と表現されます。つまり式の構造は変わらず、項の値のみが変わっていきます。したがって、第何項目であろうと、c=a+b(a,b,は任意の連続する自然数とする)と表現できます。
すこし分かりづらくなりましたが、要は、各項を入れる変数を作ってしまえばいいということです。
②①でみたように、文字(=変数)は3種類あればすべての項が表現できます。したがって3つ変数を作りましょう。
あとは、各項の値を、400万になるまで繰り返しスライドしてずらしていくイメージです。具体的な数字で言うと、
3=1+2 → 5=2+3 →8=3+5 ...
と数字が移動していくようにすれば良いです。
同じことの繰り返しなので繰り返し処理です。
あとは繰り返し処理の中で偶数が出てくる度に足し合わせるだけです。
偶数であることは、2で割り切れるということだと考えれば、rubyでどのように判別できるかわかるはずです。
おわりに
今回は【Project Euler】の問題2を解く上での考え方、流れを解説してきました。
今回の解答は、あくまで複数ある解き方の一種です。余裕があれば様々な角度から解いて見てください。
このほかにも多くの問題が存在しているので、気になる方は最下部のリンクから挑戦して見てください。
また今後、私自身その他の問題にも挑戦し、同じような備忘録を投稿していきます。
私の備忘録が少しでも皆さんの参考になれば幸いです。ありがとうございました❗
P.S. 問題を閲覧するにはアカウント登録が必要です。↑