日本数学オリンピック(JMO)2024年予選解答私的解説 その3(完)
はじめに
背景
さる2024年1月8日(月,祝)実施された、第34回日本数学オリンピック予選の解説の最後となります。
参考情報
- その1 … https://zenn.dev/angel_p_57/articles/7375a989e85be2
- その2 … https://zenn.dev/angel_p_57/articles/f0dd1569d85f56
- 問題公開先 … https://www.imojp.org/archive/mo2024/problems/jmo34yqa.pdf
解説
それでは、最後に第11問・第12問の2問を解説していきます。
第11問
- 問題: 正の整数に対して定義され正の整数値をとる関数
はf をみたし、かつ任意の正の整数f(34)=2024 に対して、3辺の長さがそれぞれa,b,c
a+f(b),~~b+f(c),~~c+f(a)
であるような三角形が存在する。このとき、 としてありうる最小の値を求めよ。ただし、同一直線上にある3点は三角形をなさないものとする。f(100)+f(101)+\cdots+f(199) - 答: 102050
関数の問題第二弾です。しかし、かなり条件がふわっとしている上、小さい数のところから値を決めていくようなこともできません。
取り敢えず三角形が存在するという条件くらいしか手がかりがありません。なのでそこから考えていくことにします。つまり、
※なお、問題文にある「ただし、同一直線上にある3点は三角形をなさないものとする」は、三角不等式の不等号
この三角不等式がどの辺の長さの順番でも成立することが必要十分です。そのため、この3条件になるのですが…
(a+f(b))+(b+f(c))\gt (c+f(a)) (b+f(c))+(c+f(a))\gt (a+f(b)) (c+f(a))+(a+f(b))\gt (b+f(c))
実はこの3条件、全て同じ内容を表しています。なぜかというと、
改めて次のように条件を列挙し直します。なお、整数という条件は大前提として省略し、また不等号
f(x)\ge 1 f(34)=2024 x+f(y)+y+f(z)\ge z+f(x)+1
この最後の条件を色々いじることになります。実際裏では色々なパターンを試して使えそうなものを厳選していたわけですが、ここでは既に選び終わったものをご紹介します。
-
の場合x=y=1 1+f(1)+1+f(z)\ge z+f(1)+1\Leftrightarrow f(z)-z\ge-1 -
の場合y=z=1 x+f(1)+1+f(1)\ge 1+f(x)+1\Leftrightarrow f(x)-x\le 2f(1)-1
これで分かることは、
そのため、ここからは
-
…①g(x)+x\ge 1\Leftrightarrow g(x)\ge 1-x -
…②g(34)+34=2024\Leftrightarrow g(34)=1990 -
…③x+(g(y)+y)+y+(g(z)+z)\ge z+(g(x)+x)+1\Leftrightarrow g(y)+2y+g(z)\ge g(x)+1 -
およびL,U~s.t.~-1\le L\le U が存在しx_L,x_U~s.t.~g(x_L)=L,g(x_U)=U …④L\le g(x)\le U
④で出てくる
さて。最小・最大を導入したことで、実はとても大きなメリットが生じています。それは任意の~が前提となっている条件を最悪のケースのケアだけで置き換えることができることです。
すなわち、③がこう変わります。
-
…③'g(y)+2y+g(z)\ge g(x)+1\Leftrightarrow g(y)+2y+L\ge U+1\Leftrightarrow U-L+1-2y\le g(y)
あとは、②の
- ④より
のためL\le g(34)\le U L\le 1990\le U - ③'より
のためU-L+1-2\cdot 34\le g(34) U\le L+2057
おまけですが、① の
※実際
これでようやく
g(34)=1990 -
およびL,U~s.t.~-1\le L\le 1990\le U\le L+2057
が存在しx_L,x_U~s.t.~g(x_L)=L,g(x_U)=U L\le g(x)\le U U-L+1-2x\le g(x)
なお、詳細は割愛しますが
では長かったですが、ここからが本題です。
求めるのは
そうすると、まず
そのため
このとき、
まあそうすると半々くらいがちょうど良くね? と思ったりもするのですが、そこは計算で確かめていきましょう。
そうすると、
※どちらかのパートが0項になっている状況も含みます。
1 で始まる公差2の等差数列の和
g(100)+g(101)+\cdots+g(199)=100L+(896-L)^2
ということで展開して平方完成なりして計算すると、確かに半々の状況になる
※念のためですが、一例として
最後に
なんというか、粘り強く条件を詰めていく根気が求められる問題なのかな、という感じでした。
第12問
- 問題: 次の条件をみたす0以上2099以下の整数の組
の個数を求めよ。(a_{1},a_{2},\cdots,a_{2100})
整数の組 であって、任意の1以上2100以下の整数(b_{1},b_{2},\cdots,b_{2100}) に対してi
a_i\equiv \sum_{gcd(j-i,2100)=1,~1\le j\le 2100} b_j~~(mod~2100)
となるものが存在する。ただし、右辺は と2100をともに割りきる2以上の整数が存在しないような1以上2100以下の整数j-i についてのj の総和である。b_j - 答:
個2^{256}\cdot 3^{180}\cdot 5^{420}\cdot 7^{210}
※あるいは 個\frac{2100^{210}}{2^{164}\cdot 3^{30}}
ついに最終問題です。いかにも難しそうです。そして実際解くの大変です。
ここで誠に申し訳ないのですが、この解説を書くにあたり、線形代数(行列計算)の知識前提のものしかできませんでした。もしよく分からないという方は、解説中の用語を拾って線形代数の予習をしてから読み直してください。
なぜ線形代数が出てくるかというと、この問題が次のように書き換えられるからです。
- 問題の別表現
関数 をp(k) とし、2100次正方行列p(k)=1~~(~gcd(k,2100)=1~),~p(k)=0~~(~gcd(k,2100)\neq 1~) の示す線形変換によって、P=(P_{i,j})~~(~P_{i,j}=p(j-i)~) ( 法2100に関する剰余環 ) 上2100次元ベクトル空間Z/2100Z が変換される先 ( 値域 ) の要素数を答えよ{Z/2100Z}^{2100}
※任意の を\bm b\in {Z/2100Z}^{2100} によって\bm a=P\bm b に変換した場合の、集合\bm a\in {Z/2100Z}^{2100} の要素数を答えよ\{\bm a\}
なお、
で、この表現を見れば経験のある人は正則行列での変換なら全単射で次元数そのままだけど正則でなかったら次元が下がるヤツやとピンと来ることでしょう。実際そのような問題です。
なお、一旦注意事項として、問題では添え字を1~2100で扱ってますが、以降は様々な場面で添え字を0開始で扱うことにします。
例えば、線形変換
で、実はこの時点で分かることがあります。
それは
そうすると、行列
すなわち、
と210次正方行列
※なお、式中の例えば
そうすると、次の関係が成り立っていることが分かります。
ということは繰り返しになっている210次元分だけを調べれば済むということです。一気に次元が落ちました。
加えて、問題自体は mod 2100 での話ですが、これもより小さい数を法とする mod に分解して考えることができます。なぜなら、
これは要するに中国の剰余定理(CRT)の一例ということなのですが、ともかくmod 2100 で考える代わりに、mod 4, mod 3, mod 25, mod 7 での状況を組み合わせる ( 欲しいのは要素数なので、各 mod で調べた要素数を掛け合わせる ) ことで問題が解けることを意味します。
※もう少しちゃんと言うなら、
ということは、この問題は次の問題に置きかえることができることになります。
- 整理した問題
関数 をp(k) とし、210次正方行列p(k)=0~~(~k が 2,3,5,7 いずれかの倍数~),~p(k)=1~~(~その他~) の示す線形変換によって、X=(X_{i,j})~~(~X_{i,j}=p(mod(j-i,210))~) ( 法Z/mZ に関する剰余環 ) 上210次元ベクトル空間m が変換される先 ( 値域 ) の要素数を{Z/mZ}^{210} それぞれで求め、その積を答えよm=4,3,25,7
※ それぞれで、任意のm=4,3,25,7 を\bm b\in {Z/mZ}^{210} によって\bm a=P\bm b に変換した場合の、集合\bm a\in {Z/mZ}^{210} の要素数を求め、その積を答えよ\{\bm a\}
大分整理された気がしますが、実はここがスタートラインです。なぜなら依然として210次という巨大な行列が残っており、これを何とかして正則かどうか、正則でない場合どの程度次元が縮小されるかを調べなければならないからです。
もうこの形になった以上、個別のベクトル
ここで
- 第0行の要素並び
を、p(0),p(1),\cdots,p(k),\cdots,p(209) を 2,3,5,7 それぞれで割った余りでソートするように列を入れ替えるk
どういうことかと言うと、
0~209で全部書くのは大変なので、0~29 に限って並べ方を挙げると次のようになります。
0,6,12,18,24,10,16,22,28,4,20,26,2,8,14,15,21,27,3,9,25,1,7,13,19,5,11,17,23,29
ちゃんと数式で書くなら、次のような操作を行っていることになります。
- 優先順位を示す関数
を次のように定め、s(k)
s(k)=mod(k,2)\cdot 105+mod(k,3)\cdot 35+mod(k,5)\cdot 7+mod(k,7) -
に基づき、置換s(k) を\sigma とし、\sigma(k)=s^{-1}(k) - 行
を(p(0),p(1),\cdots,p(k),\cdots,p(209)) に並び替える ( 置換する )(p(\sigma(0)),p(\sigma(1)),\cdots,p(\sigma(k)),\cdots,p(\sigma(209)))
こうすることで、次の図で示すように、段階的に先頭のブロックの要素が全て0、残りが同一パターンという規則性を作り出すことができます。
同じようなことを行同士の入れ替えとしても行います。
結局、行列全体で見れば、元の行列
そうすると、0の要素のブロックは対角部分に現れることになるため、
X'=\left(\begin{array}{c:c} ~ & A \\ \hdashline A & ~\end{array}\right) A=\left(\begin{array}{c:c:c} ~ & B & B \\ \hdashline B & ~ & B \\ \hdashline B & B & ~ \end{array}\right) B=\left(\begin{array}{c:c:c:c:c} ~ & C & C & C & C \\ \hdashline C & ~ & C & C & C \\ \hdashline C & C & ~ & C & C \\ \hdashline C & C & C & ~ & C \\ \hdashline C & C & C & C & ~ \end{array}\right) C=\left(\begin{array}{c:c:c:c:c:c:c} ~ & D & D & D & D & D & D \\ \hdashline D & ~ & D & D & D & D & D \\ \hdashline D & D & ~ & D & D & D & D \\ \hdashline D & D & D & ~ & D & D & D \\ \hdashline D & D & D & D & ~ & D & D \\ \hdashline D & D & D & D & D & ~ & D \\ \hdashline D & D & D & D & D & D & ~ \end{array}\right) -
…1次単位正方行列D=(1)
これでようやく
実際、全要素が 1 のn次正方行列
そこで、rank を探るために地道に対角化を行うことにします。つまり、掃き出し法(ガウスの消去法)のように、行基本変形を繰り返し、なるべく対角行列に寄せていくということです。
ただ、定数倍だけは可逆操作 ( 正則行列の掛け算 ) にならないおそれがあるため避けます。
例えば、
※実際に手順を紹介すると長くなるので、正則行列を左から掛けることで同等の結果になるようにしています。
そうすると、最後の小行列ブロックに
-
…これは普通に対角化できるX''=\left(\begin{array}{c:c} A & ~ \\ \hdashline ~ & A\end{array}\right) A'=\left(\begin{array}{c:c:c} B & ~ & -B \\ \hdashline ~ & B & -B \\ \hdashline ~ & ~ & 2B \end{array}\right) B'=\left(\begin{array}{c:c:c:c:c} C & ~ & ~ & ~ & -C \\ \hdashline ~ & C & ~ & ~ & -C \\ \hdashline ~ & ~ & C & ~ & -C \\ \hdashline ~ & ~ & ~ & C & -C \\ \hdashline ~ & ~ & ~ & ~ & 4C \end{array}\right) C'=\left(\begin{array}{c:c:c:c:c:c:c} D & ~ & ~ & ~ & ~ & ~ & -D \\ \hdashline ~ & D & ~ & ~ & ~ & ~ & -D \\ \hdashline ~ & ~ & D & ~ & ~ & ~ & -D \\ \hdashline ~ & ~ & ~ & D & ~ & ~ & -D \\ \hdashline ~ & ~ & ~ & ~ & D & ~ & -D \\ \hdashline ~ & ~ & ~ & ~ & ~ & D & -D \\ \hdashline ~ & ~ & ~ & ~ & ~ & ~ & 6D \end{array}\right)
そうすると焦点は、最後のブロックに現れる係数 2,4,6 が
-
の場合m=25,7
係数2,4,6はいずれも で逆数を持ちます。ということは、Z/mZ 自体が正則でありX は丸々210次元分あることになります。\{\bm a\}
ということで、 の要素数はそれぞれ\{\bm a\} です。25^{210}, 7^{210} -
の場合m=3
係数2,4には で逆数があるのですが、Z/3Z で 6 には逆数がありません。実際6\equiv 0~\mod~3 の最後のブロックはC' と零行列になっていますから、ここの部分で次元が縮小していることになります。6D=O
ということで、 の rankX から2\cdot 3\cdot 5\cdot 6=180 は180次元、要素数は\{\bm a\} です。3^{180} -
の場合m=2
このケースが少し厄介です。なぜなら、係数2,4,6はいずれも で逆数を持たないのですが、4 は 0 そのもの (Z/4Z ) であるのに対して、2,6 は零元 ( 例えば4\equiv 0~\mod~4 となる2x\equiv 0~\mod~4 が存在する ) という違いがあるからです。そこで場合分けが必要になります。x\not\equiv 0~\mod~4 - 0や零元が関わらない部分
行列を分解していく際に、最後の の関わらない96次元分 (2B, 4C, 6D )2\cdot 2\cdot 4\cdot 6=96
これは丸々 の要素が自由に選べる次元として残ります。Z/4Z - 0になる部分
行列を分解していく際に、 の関わる部分、あるいは4C 両方と関わって結局 0 になる部分です。 (2B, 6D であることに注意 )2\cdot 6\equiv 0~\mod~4
こちらは 50次元分 ( ) ありますが、完全に縮小して無くなります。2\cdot(3\cdot 7+4)=50 - 残り ( 零元が関わる部分 )
残り64次元分は、 の中で、\bm{a}=X\bm{b} (\bm{a'}=2R\bm{b'} は何かしらの正則行列 ) という計算に相当する次元になります。R
そうすると、 の元 0,1,2,3 の4要素は 2 が掛かっていることで 0,2 の2要素へと縮退してしまいます。Z/4Z
以上を考慮すると、
は\{\bm a\} 上で単純に〇〇次元と言うことはできませんが、要素数としては、自由な96次元分と縮退した64次元分からZ/4Z と計算することができます。4^{96}\cdot 2^{64} - 0や零元が関わらない部分
以上で、各
正直に言うと、要素を並び替えて規則性を見出すことを思いつくまで相当時間がかかりました。これを本番試験の時間の中で解けたら人外レベルではないかと思います。
おわりに
今回で最後の2問も終わり、これで全部解説できました。
正直解く時よりも説明を書く方が大変だった気もしますが、皆さんの参考になれば幸いです。
来年ももし全問解ければ、また解説を挙げたいと思います。
Discussion