ツイッターで、数学夏祭り、というのを見かけたので、解いてみました。8/31の問題は↓です。
誰でも参加できる2週間に渡るTwitter難問チャレンジ
— 数学夏祭り@8/31 17時開幕 (@mathmatsuri) August 31, 2020
数学夏祭り 記念すべき第一問!
「解答する、拡散する、解説する」
それぞれにキャンペーンプライズを進呈!
みんなで祭りを盛り上げよう!#数学夏祭り#数学夏祭り問1
参加方法は↓リプに続きます。 pic.twitter.com/CD1JT7Txax
プログラムを使って解答
問題は整数問題で、大学入試の出題であれば標準的な難易度だと思われます。ただ、全部調べていくのは大変なので、プログラムを書くことにしました。
<?php // p<=qから、1/p > 1/q なので、2/p>=左辺。またr<79なので、右辺>=1/79。 // なので、2/p >= 1/79 の範囲だけ調べればよく、1 <= p <= 158 // 順に計算していくプログラムを書く for ($p=1; $p<=158; $p++) { for ($r=1; $r<79; $r++) { if (($p * $r-79) != 0 && (79 * $p) % ($p * $r-79) == 0) { $q = (79 * $p) / ($p * $r-79); if ($q >= $p) { echo '(' . $p . ', ' . $q . ', ' . $r . ')'; echo PHP_EOL; } } } } /* // 実行結果 (p, q, r) (2, 158, 40) (4, 316, 20) (5, 395, 16) (8, 632, 10) (10, 790, 8) (16, 1264, 5) (20, 1580, 4) (40, 3160, 2) (79, 79, 2) (80, 6320, 1) (158, 158, 1) // 前から3番め (5, 395, 16) // 後ろから5番め (20, 1580, 4) 16 x 1580 = 25280 答えは 25280 */
プログラムの前準備として、変数pの範囲をある程度絞り込みしておきます。上のコードでは不等式で比較していくことで、p<=158を算出しています。CPU性能に頼った力技でも良いですが、私は上のコードのように、ある程度数学を活用するのが好きです。
プログラムは書きなぐったコードなので、それほどキレイではないかもしれませんが、p,q,rの値の組を探すだけなら十分です。
こうやって、p,q,rの値の組を列挙したら、あとは掛け算をすればOKです。
記事公開日: 2020年09月01日