頭脳王で輝かしい功績を残されている河野玄斗さんが数学の問題を元日にTwitterで載せていました。
数学好きの僕ですが、ペンと紙で解くのもいいけど、プログラミングで解いてみたいと思い、PHPで解いてみました。
プログラミングで解くと、問題が変わっても回答をすぐに得ることができるメリットがあります。
河野玄斗さんプチ紹介
神奈川県生まれ。私立聖光学院高校を経て、東京大学医学部卒業。
第30回ジュノン・スーパーボーイ・コンテストでは「ベスト30」に選ばれています。
日本の大学受験において最難関とされる東京大学理科III類に現役合格し、在学中の21歳の時(医学部三年時)に司法試験にも一発で合格しています。
日本テレビのクイズ番組『頭脳王』では「東大医学部の神脳」と呼称され、2019年までに2連覇し、2020年放送では史上初の3連覇に期待がかかっていましたが敗北しました。
また2020年3月に医師国家試験に合格しています。
問題
さて今回出された問題がどのようなものかを引用いたします。
あけましておめでとうございます。
今年も本気で駆け抜けていきますので皆さんよろしくお願いします!せっかくなので「挑戦状」としてオリジナル問題を作りました。
厳密な論証はそこそこ難しいですが、自信のある方は是非挑戦してみてください! pic.twitter.com/77OuB75R4z— 河野玄斗 (@gengen_36) January 1, 2021
見た目がシンプルでとっつけそうだなとも思いましたので挑戦してみました。
プログラミング
どのように解くか
○乗同士の足し算ですので、1乗から順に調べていきます。
和の合計が2021ですので、○乗した数字が2021を超えた瞬間、合計する処理に移します。
上記でまとめた数字同士を足して2021になる組み合わせを探します。
方法としましては、配列にまず入れておいて、それを回しながら試していきます。
2021から配列内の1つの数字を引いた、差の数字が配列内にあれば良いと判定します。
実際に書いたコード
このようにして回答である2020を得ました。
この式はn=1の時のみ成り立つ式でした。年数が変化していけば、多くの解を得る年もあるかと思いますが。
最後に
Twitterで返信をしてご本人にもいいねをいただきました。
これからも数学の問題をPHPで解いて、スキルアップを兼ねた学習にしていきたいと思います。