はじめに
【Project Euler】とは、プログラミングで解く数学の問題集です。
本投稿では初学者なりに、Problem1 を解くにあたっての考え方を解説しています。
ちなみに言語はRubyを用いています。
※本投稿は、Project Eulerのガイドラインに従い、解答例としてのコードは載せておりません。
また、問題に関しては私が翻訳しています。ミスがあればご指摘ください。
【Project Euler】について知りたい方はこちらから↓
問題(original ver.)
2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any remainder.
What is the smallest positive number that is evenly divisible by all of the numbers from 1 to 20?
問題(翻訳ver.)
2520は1から10までのすべての数字で割り切れる最小の数である。
同様に1から20までの整数で割り切れる最小の数を求めよ。
問題を解く上でのヒント
①この問題は解釈が重要です。1~20までの数字で割り切れるということは、求める数は言い換えれば1~20の倍数になっています。そして、その中で最小のものを求められているので、1~20の最小公倍数を求めればいいと解釈できます。
②最小公倍数を求めるのは非常に簡単です。例えば、aとbという数字の最小公倍数を求めるには、
a.lcm(b)
という記述だけで十分です。
約数が少なければこの記述を繰り返し手で記述しても良いのですが、今回は1~20なので手間がかかります。
③そこで、予め自分で1~20の数字を入れた配列をつくります。
そしてその配列に対して繰り返し処理をします。この時、injectを用いると、記述を非常にシンプルにできます。injectの使い方に関しては本記事では説明を省きますので、調べてみてください。
おわりに
今回は【Project Euler】の問題5を解く上での考え方、流れを解説してきました。
今回の問題も、知識があれば非常にシンプルな記述だけで解けます。シンプルにまとめられたときは気持ちがいいですね。
injectの使い方もこの際に覚えてしまいましょう!
このほかにも多くの問題が存在しているので、気になる方は最下部のリンクから挑戦して見てください。
また今後、私自身その他の問題にも挑戦し、同じような備忘録を投稿していきます。
私の備忘録が少しでも皆さんの参考になれば幸いです。ありがとうございました❗
問題を閲覧するにはアカウント登録が必要です。↑