数学夏祭りNo.1 (8/31) の解説
問題
誰でも参加できる2週間に渡るTwitter難問チャレンジ
— 数学夏祭り@8/31 17時開幕 (@mathmatsuri) August 31, 2020
数学夏祭り 記念すべき第一問!
「解答する、拡散する、解説する」
それぞれにキャンペーンプライズを進呈!
みんなで祭りを盛り上げよう!#数学夏祭り#数学夏祭り問1
参加方法は↓リプに続きます。 pic.twitter.com/CD1JT7Txax
こちらの問題を解説していきます。
解説
$1/p + 1/q = r/79$ について $1 \leq r < 79$ より、$1/79 \leq 1/p + 1/q < 1$ 。また $p \leq q$ より $1/q \leq 1/p$ となるため
\[ \frac{1}{79} \leq \frac{1}{p} + \frac{1}{q} \leq \frac{1}{p} + \frac{1}{p} = \frac{2}{p} \]
となり $p$ は最大でも $2\times 79 = 158$ となる。また、$p=1$ のとき$1/p = 1$ のため、条件を満たす $q,r$ は存在しない。 したがって、 $2 \leq p \leq 158$ となる。
両辺を $79pq$ 倍すると
\[ 79(p+q) = pqr \]
を得るが、 $79$ は素数かつ $r < 79$ であるため、「 $p$ が $79$ の倍数」または「 $q$ が $79$ の倍数」である。
場合1: $p$ が $79$ の倍数
$p$ が $79$ の倍数のとき、前述の $p$ の条件より $p = 79, 158$ に限られる。
$p=79$ のとき
\[ \frac{1}{q} = \frac{r-1}{79} \Leftrightarrow q = \frac{79}{r-1} \]
において $79$ は素数なので $q=79, r=2$ のみ。
$p=158$ のとき
\[ \frac{1}{q} = \frac{2r-1}{158} \Leftrightarrow q = \frac{158}{2r-1} \]
において、 $(p=)158 \leq q$ より $q=158, r=1$ のみ。
場合2: $q$ が $79$ の倍数
$q=79n$ $(n=1,2,3,\dots)$ とする。このとき
\[ \frac{1}{p} + \frac{1}{79n} = \frac{79n + p}{79np} = \frac{r}{79} \]
より
\[ \frac{79n + p}{np} = r \]
を得る。 $r$ は整数なので $79n+p$ が $np$ で割り切れる場合に限られる。
このとき、$p \geq 2$ より $79n$ が $p$ で割り切れるため、(すでに $p$ が $79$ の倍数の場合は調べたので) $p$ が $79$ の倍数でない場合は、 $n=p$ の場合のみ。 したがって、
\[ \frac{79p + p}{p^2} = \frac{80p}{p^2} = \frac{80}{p} = r \]
となり $p$ は $80$ の約数であればよく、 $(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), (80,6320,1) \]
まとめ
以上を $p$ の小さい順に並べると次のようになる
$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$ 番目の $r$ 」は $16$ 、 「後ろから $5$ 番目にある $q$ 」は $1580$ のため、回答は $16 \times 1580 = 25280$ となる。
おまけ: Ruby による総当り計算のワンライナー
あくまで検算用として総当りで調べる方法も書いておく。ただし、いきなり p,q,r を任意の整数にして探すより、上記の解説のように $p$ の取りうる範囲を絞ったりして有限の組み合わせから探すようにしたほうが効率がよい。
$ ruby -e '2.upto(158) { |p_| 78.downto(1) { |r| q_inv = Rational(r,79) - Rational(1,p_); break if q_inv <= 0; q = 1/q_inv; puts "p = #{p_}, q = #{q.to_i}, r = #{r}" if q.denominator == 1 and p_ <= q }}'
フォーマットするとこんな感じ。
2.upto(158) { |p_| 78.downto(1) { |r| q_inv = Rational(r,79) - Rational(1,p_) break if q_inv <= 0 q = 1/q_inv puts "p = #{p_}, q = #{q.to_i}, r = #{r}" if q.denominator == 1 and p_ <= q } }
\[ \frac{1}{q} = \frac{r}{79} - \frac{1}{p} \]
を計算して $q$ が正の整数かつ $p \leq q$ となる組み合わせを列挙する。