🏅

日本数学オリンピック(JMO)2024年予選解答私的解説 その3(完)

2024/01/28に公開

はじめに

背景

さる2024年1月8日(月,祝)実施された、第34回日本数学オリンピック予選の解説の最後となります。

参考情報

解説

それでは、最後に第11問・第12問の2問を解説していきます。

第11問

  • 問題: 正の整数に対して定義され正の整数値をとる関数ff(34)=2024をみたし、かつ任意の正の整数a,b,cに対して、3辺の長さがそれぞれ
    a+f(b),~~b+f(c),~~c+f(a)
    であるような三角形が存在する。このとき、f(100)+f(101)+\cdots+f(199)としてありうる最小の値を求めよ。ただし、同一直線上にある3点は三角形をなさないものとする。
  • 答: 102050

関数の問題第二弾です。しかし、かなり条件がふわっとしている上、小さい数のところから値を決めていくようなこともできません。

取り敢えず三角形が存在するという条件くらいしか手がかりがありません。なのでそこから考えていくことにします。つまり、p,q,r と長さがある場合の三角不等式 p+q\gt r です。
※なお、問題文にある「ただし、同一直線上にある3点は三角形をなさないものとする」は、三角不等式の不等号 \gt\ge でないことの念押しです。

この三角不等式がどの辺の長さの順番でも成立することが必要十分です。そのため、この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条件、全て同じ内容を表しています。なぜかというと、(x+f(y))+(y+f(z))\gt (z+f(x)) という条件にそれぞれ (x,y,z)=(a,b,c),~(b,c,a),~(c,a,b) を代入しているに過ぎないからです。
改めて次のように条件を列挙し直します。なお、整数という条件は大前提として省略し、また不等号 p \gt qp\ge q+1 の形に置き換えておきます。それから、以降、任意の~の部分も特に明記しません

  • 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

これで分かることは、f(x) そのものはともかくとして、f(x)-x は値の範囲が限られている ( 数学用語で言うなら「有界」 ) ということです。
そのため、ここからは g(x)=f(x)-x\Leftrightarrow f(x)=g(x)+x を導入して、こちらの性質を探っていくことにします。そして、有界ということは、対象が整数ですから最小・最大が存在するということを意味します。そのことを加味し、条件を再整理します。

  • 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 …④

④で出てくる L,U が最小・最大です。既に f(z)-z\ge-1 は分かっているので、-1\le L も盛り込んでおきます。

さて。最小・最大を導入したことで、実はとても大きなメリットが生じています。それは任意の~が前提となっている条件を最悪のケースのケアだけで置き換えることができることです。
すなわち、③がこう変わります。

  • 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) …③'

あとは、②の g(34)=1990 により L,U の条件をもう少し絞り込んでおきます。

  • ④より 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(x)\ge 1-x はこの時点で既に成立してすることがわかるため、条件として捨てることができます。
※実際 x\ge 2 に対しては 1-x\le -1\le L\le g(x) ですし、残り x=1 に対しても g(1)\lt 0 と条件不成立を仮定すると g(1)=L=-1 のケースに限定されるものの、U-L+1-2\cdot 1\le g(1) に反してしまうからです。

これでようやくg(x)の条件が整いました。

  • 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)

なお、詳細は割愛しますが L,U の条件も絞り込んでいるので、L,U を先に適当に ( もちろん -1\le L\le 1990\le U\le L+2057 を満たす中で ) 選んだとしても、なにかしら条件に合う g(x) が存在します。そのため目的の g(x) を探す際は、L,U の値を決めることに注力できるようになっています。

では長かったですが、ここからが本題です。
求めるのは f(100)+f(101)+\cdots+f(199)=g(100)+g(101)+\cdots+g(199)+100+101+\cdots+199 としてありうる最小の値でした。ということは、L,Uの値を決めてその中で g(100)\sim g(199) の値を目一杯小さく取るような g(x) だけを考えれば十分です。

そうすると、まず U-L+1-2x\le g(x) という条件がありますが、U の値を制約上の最小値 1990 以外にするのは不利にしかならないため、考える必要がありません。
そのため U=1990 と固定した上で、目一杯小さい取り方の g(x)、つまり 100\le x\le 199 において g(x)=max(L,1990-L+1-2x) のみを考えれば十分ということになります。

このとき、L の値の大小にはトレードオフがあることが分かります。すなわち、L を小さくし過ぎると 1990-L+1-2x の制約の方が効いて不利ですし、逆に大きくし過ぎると g(x) 全体が単純に底上げされてやっぱり不利になるということです。( 次図グラフ参照 )

まあそうすると半々くらいがちょうど良くね? と思ったりもするのですが、そこは計算で確かめていきましょう。100\le x\le 199 の範囲で L,~1990-L+1-2x を比較してみると、896\le L なら全て前者の方が、L\le 796 なら全て後者の方が大きい値を取ります。そのため、796\le L\le 896 の範囲に限定して考えれば十分です。
そうすると、g(x)=max(L,1990-L+1-2x) は、g(100) から2ずつ小さくなってきて \cdots,L+5,L+3 そして g(995-L)=L+1 まで来て ( ここまで 896-L項 )、そこから g(996-L) 以降は全て値 L という構成になります。
※どちらかのパートが0項になっている状況も含みます。
1 で始まる公差2の等差数列の和 1+3+5+\cdots は項数の平方で計算できますから、L との差分を考えて計算すると、次のようになります。

  • g(100)+g(101)+\cdots+g(199)=100L+(896-L)^2

ということで展開して平方完成なりして計算すると、確かに半々の状況になる L=846 が丁度合計最小 g(100)+g(101)+\cdots+g(199)=87100 となっています。
※念のためですが、一例として g(x)=1145-2x~(~x\le 149,~x\neq 34~),~g(34)=1990,~g(x)=846~(~150\le x~) が該当します。
最後に 100+101+\cdots+199=14950 を加えて 102050 が答えです。

なんというか、粘り強く条件を詰めていく根気が求められる問題なのかな、という感じでした。

第12問

  • 問題: 次の条件をみたす0以上2099以下の整数の組(a_{1},a_{2},\cdots,a_{2100})の個数を求めよ。
    整数の組(b_{1},b_{2},\cdots,b_{2100})であって、任意の1以上2100以下の整数iに対して
    a_i\equiv \sum_{gcd(j-i,2100)=1,~1\le j\le 2100} b_j~~(mod~2100)
    となるものが存在する。ただし、右辺はj-iと2100をともに割りきる2以上の整数が存在しないような1以上2100以下の整数jについてのb_jの総和である。
  • 答: 2^{256}\cdot 3^{180}\cdot 5^{420}\cdot 7^{210}
    ※あるいは \frac{2100^{210}}{2^{164}\cdot 3^{30}}

ついに最終問題です。いかにも難しそうです。そして実際解くの大変です。
ここで誠に申し訳ないのですが、この解説を書くにあたり、線形代数(行列計算)の知識前提のものしかできませんでした。もしよく分からないという方は、解説中の用語を拾って線形代数の予習をしてから読み直してください。

なぜ線形代数が出てくるかというと、この問題が次のように書き換えられるからです。

  • 問題の別表現
    関数 p(k)p(k)=1~~(~gcd(k,2100)=1~),~p(k)=0~~(~gcd(k,2100)\neq 1~) とし、2100次正方行列 P=(P_{i,j})~~(~P_{i,j}=p(j-i)~) の示す線形変換によって、Z/2100Z ( 法2100に関する剰余環 ) 上2100次元ベクトル空間 {Z/2100Z}^{2100} が変換される先 ( 値域 ) の要素数を答えよ
    ※任意の \bm b\in {Z/2100Z}^{2100}\bm a=P\bm b によって \bm a\in {Z/2100Z}^{2100} に変換した場合の、集合 \{\bm a\} の要素数を答えよ

なお、Z/2100Z は 0~2099 の数の集合で、足し算、引き算、掛け算 ( 割り算は除く ) を全て mod 2100 でこなすものを指します。これは環であって(数)体ではないので、実際には {Z/2100Z}^{2100} はベクトル空間ではないのですが、構造的にはほとんど同じなのでこういう表現にしています。
で、この表現を見れば経験のある人は正則行列での変換なら全単射で次元数そのままだけど正則でなかったら次元が下がるヤツやとピンと来ることでしょう。実際そのような問題です。

なお、一旦注意事項として、問題では添え字を1~2100で扱ってますが、以降は様々な場面で添え字を0開始で扱うことにします
例えば、線形変換 \bm a=P\bm b~~(~P=(P_{i,j}),~P_{i,j}=p(j-i)~) を詳しく書くと、次のような行列の計算式になります。

\begin{pmatrix} a_{0} \\ a_{1} \\ a_{2} \\ \vdots \\ a_{2098} \\ a_{2099} \\ \end{pmatrix}= \begin{pmatrix} p(0) & p(1) & p(2) & \cdots & p(2098) & p(2099) \\ p(-1) & p(0) & p(1) & \cdots & p(2097) & p(2098) \\ p(-2) & p(-1) & p(0) & \cdots & p(2096) & p(2097) \\ \vdots & \vdots & \vdots & \ddots & \vdots & \vdots \\ p(-2098) & p(-2097) & p(-2096) & \cdots & p(0) & p(1) \\ p(-2099) & p(-2098) & p(-2097) & \cdots & p(-1) & p(0) \\ \end{pmatrix} \begin{pmatrix} b_{0} \\ b_{1} \\ b_{2} \\ \vdots \\ b_{2098} \\ b_{2099} \\ \end{pmatrix}

で、実はこの時点で分かることがあります。
それは p(k)k が 2100と互いに素かどうかで値を変える関数であることから、k が 2,3,5,7 いずれかの倍数かどうかにのみ依存すること ( いずれかの倍数なら 0、いずれの倍数でもないなら 1 )、そして p(k+210)=p(k) という周期性があることです。
そうすると、行列Pは各行・列とも、p(0)\sim p(219) の繰り返しが ( 1つずつずれながら ) 現れており、210次ずつに分解すると全ての小行列が同一になっていることが分かります。
すなわち、

X=\begin{pmatrix} p(0) & p(1) & p(2) & \cdots & p(208) & p(209) \\ p(209) & p(0) & p(1) & \cdots & p(207) & p(208) \\ p(208) & p(209) & p(0) & \cdots & p(206) & p(207) \\ \vdots & \vdots & \vdots & \ddots & \vdots & \vdots \\ p(2) & p(3) & p(4) & \cdots & p(0) & p(1) \\ p(1) & p(2) & p(3) & \cdots & p(209) & p(0) \\ \end{pmatrix}

と210次正方行列X~(~X=(X_{i,j}),~X_{i,j}=p(mod(j-i,210)~)をおいたとき、\bm a=P\bm b の内訳が次のようになっているということです。

\left(\begin{array}{} \bm{a_{0\sim 209}} \\ \hdashline \bm{a_{210\sim 419}} \\ \hdashline \bm{a_{420\sim 629}} \\ \hdashline \vdots \\ \hdashline \bm{a_{1680\sim 1889}} \\ \hdashline \bm{a_{1890\sim 2099}} \\ \end{array}\right) = \left(\begin{array}{c:c:c:c:c:c} X & X & X & \cdots & X & X \\ \hdashline X & X & X & \cdots & X & X \\ \hdashline X & X & X & \cdots & X & X \\ \hdashline \vdots & \vdots & \vdots & \ddots & \vdots & \vdots \\ \hdashline X & X & X & \cdots & X & X \\ \hdashline X & X & X & \cdots & X & X \\ \end{array}\right) \left(\begin{array}{} \bm{b_{0\sim 209}} \\ \hdashline \bm{b_{210\sim 419}} \\ \hdashline \bm{b_{420\sim 629}} \\ \hdashline \vdots \\ \hdashline \bm{b_{1680\sim 1889}} \\ \hdashline \bm{b_{1890\sim 2099}} \\ \end{array}\right)

※なお、式中の例えば\bm{a_{0\sim 209}}\bm{a}の0~209要素を切り出した210次元ベクトルを表しています。

そうすると、次の関係が成り立っていることが分かります。

\bm{a_{0\sim 209}} = \bm{a_{210\sim 419}} = \cdots = \bm{a_{1890\sim 2099}} = X(\bm{b_{0\sim 209}} + \bm{b_{0\sim 419}} + \cdots + \bm{b_{1890\sim 2099}})

ということは繰り返しになっている210次元分だけを調べれば済むということです。一気に次元が落ちました。

加えて、問題自体は mod 2100 での話ですが、これもより小さい数を法とする mod に分解して考えることができます。なぜなら、2100=2^2\cdot 3\cdot 5^2\cdot 7 と素因数分解できることで次の関係があるためです。

\begin{align*} ~ & \alpha\equiv\beta~\mod~2100 \\ \Leftrightarrow &~~~~\alpha\equiv\beta~\mod~2^2~~and~~\alpha\equiv\beta~\mod~3 \\ ~ & and~~\alpha\equiv\beta~\mod~5^2~~and~~\alpha\equiv\beta~\mod~7 \end{align*}

これは要するに中国の剰余定理(CRT)の一例ということなのですが、ともかくmod 2100 で考える代わりに、mod 4, mod 3, mod 25, mod 7 での状況を組み合わせる ( 欲しいのは要素数なので、各 mod で調べた要素数を掛け合わせる ) ことで問題が解けることを意味します。
※もう少しちゃんと言うなら、\{\bm{a}\in {Z/2100Z}^{210}\} と直積 \{\bm{a}\in {Z/4Z}^{210}\}\times\{\bm{a}\in {Z/3Z}^{210}\}\times\{\bm{a}\in {Z/25Z}^{210}\}\times\{\bm{a}\in {Z/7Z}^{210}\} ( それぞれの Z/mZ^{210}\bm{a}=X\bm{b} ) との間にCRTにもとづく全単射があるので、|\{\bm{a}\in {Z/2100Z}^{210}\}|=|\{\bm{a}\in {Z/4Z}^{210}\}|\cdot|\{\bm{a}\in {Z/3Z}^{210}\}|\cdot|\{\bm{a}\in {Z/25Z}^{210}\}|\cdot|\{\bm{a}\in {Z/7Z}^{210}\}| と、要素数が積で表されるということです。

ということは、この問題は次の問題に置きかえることができることになります。

  • 整理した問題
    関数 p(k)p(k)=0~~(~k が 2,3,5,7 いずれかの倍数~),~p(k)=1~~(~その他~) とし、210次正方行列 X=(X_{i,j})~~(~X_{i,j}=p(mod(j-i,210))~) の示す線形変換によって、Z/mZ ( 法mに関する剰余環 ) 上210次元ベクトル空間 {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次という巨大な行列が残っており、これを何とかして正則かどうか、正則でない場合どの程度次元が縮小されるかを調べなければならないからです。
もうこの形になった以上、個別のベクトル \bm{a}, \bm{b} のことはほぼ考える必要はなくなり、行列 Xrank ( 階数 ) を対角化なりで探れば十分なのですが、それにしては X の要素の規則性が今一掴めません。この規則性をどう見出すのかが課題となります。

ここで X の行や列を交換しても rank状況には影響しないことを利用し、規則性を作り出すことを考えます。具体的には次の通りです。

  • 第0行の要素並び p(0),p(1),\cdots,p(k),\cdots,p(209) を、k を 2,3,5,7 それぞれで割った余りでソートするように列を入れ替える

どういうことかと言うと、p(k)k の部分を見て、2で割った余りが 0 の要素は 1 の要素より前に来るように、2で割った余りが同じであれば 3で割った余りを見て 0,1,2 の順で優先されるように、…というのを、5,7 まで行う並べ方にするということです。
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、残りが同一パターンという規則性を作り出すことができます。

同じようなことを行同士の入れ替えとしても行います。
結局、行列全体で見れば、元の行列 X=(X_{i,j})~~(~X_{i,j}=p(mod(j-i,210))~) に対して入れ替えを行った行列 X' を、X'=(X_{\sigma(i),\sigma(j)}) として作り出すということです。
そうすると、0の要素のブロックは対角部分に現れることになるため、X' は小行列のブロック毎に分解していくことで、次のように表せます。( なお零行列の部分は空白にしています )

  • 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)
  • D=(1) …1次単位正方行列

これでようやく X の rank を求めるという目的に対して光明が見えました。このブロック毎に分解した形に分かり易い規則性がありますから、このそれぞれで rank を調べれば良いだろうと見当がつくからです。
実際、全要素が 1 のn次正方行列Uに対する U-I ( Iは単位行列 ) という正則な行列 ( 逆行列 (U-I)^{-1}=(n-1)^{-1}U-I ) に対応する形になっており、有理数/実数係数で考えているのであれば D,C,B,A,X' 全て正則で済む話です。しかし、今は係数を環Z/mZで考えているため、逆数操作 (n-1)^{-1} ができる保証がありません。この点をどうするかが課題になります。

そこで、rank を探るために地道に対角化を行うことにします。つまり、掃き出し法(ガウスの消去法)のように、行基本変形を繰り返し、なるべく対角行列に寄せていくということです。
ただ、定数倍だけは可逆操作 ( 正則行列の掛け算 ) にならないおそれがあるため避けます。
例えば、B の場合は次のようになります。
※実際に手順を紹介すると長くなるので、正則行列を左から掛けることで同等の結果になるようにしています。

\left(\begin{array}{c:c:c:c:c} -I & ~ & ~ & ~ & I \\ \hdashline ~ & -I & ~ & ~ & I \\ \hdashline ~ & ~ & -I & ~ & I \\ \hdashline ~ & ~ & ~ & -I & I \\ \hdashline I & I & I & I & -3I \end{array}\right)\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)=\left(\begin{array}{c:c:c:c:c} C & ~ & ~ & ~ & -C \\ \hdashline ~ & C & ~ & ~ & -C \\ \hdashline ~ & ~ & C & ~ & -C \\ \hdashline ~ & ~ & ~ & C & -C \\ \hdashline ~ & ~ & ~ & ~ & 4C \end{array}\right)

そうすると、最後の小行列ブロックに (n-1)^{-1} に対応する 4C が残ることになります。同じようにしてそれぞれに対角化を施し、X',A,B,C\Leftarrow X'',A',B',C' に変化したものとします。

  • 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 が Z/mZ で逆数を持つか? という点になります。これを順に調べていきます。

  • m=25,7 の場合
    係数2,4,6はいずれもZ/mZで逆数を持ちます。ということは、X 自体が正則であり \{\bm a\} は丸々210次元分あることになります。
    ということで、\{\bm a\} の要素数はそれぞれ 25^{210}, 7^{210} です。

  • m=3 の場合
    係数2,4には Z/3Z で逆数があるのですが、6\equiv 0~\mod~3 で 6 には逆数がありません。実際 C' の最後のブロックは 6D=O と零行列になっていますから、ここの部分で次元が縮小していることになります。
    ということで、X の rank 2\cdot 3\cdot 5\cdot 6=180 から \{\bm a\} は180次元、要素数は 3^{180} です。

  • m=2 の場合
    このケースが少し厄介です。なぜなら、係数2,4,6はいずれもZ/4Zで逆数を持たないのですが、4 は 0 そのもの ( 4\equiv 0~\mod~4 ) であるのに対して、2,6 は零元 ( 例えば 2x\equiv 0~\mod~4 となる x\not\equiv 0~\mod~4 が存在する ) という違いがあるからです。そこで場合分けが必要になります。

    • 0や零元が関わらない部分
      行列を分解していく際に、最後の 2B, 4C, 6D の関わらない96次元分 ( 2\cdot 2\cdot 4\cdot 6=96 )
      これは丸々 Z/4Z の要素が自由に選べる次元として残ります。
    • 0になる部分
      行列を分解していく際に、4C の関わる部分、あるいは 2B, 6D 両方と関わって結局 0 になる部分です。 ( 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は何かしらの正則行列 ) という計算に相当する次元になります。
      そうすると、Z/4Z の元 0,1,2,3 の4要素は 2 が掛かっていることで 0,2 の2要素へと縮退してしまいます。

    以上を考慮すると、\{\bm a\}Z/4Z上で単純に〇〇次元と言うことはできませんが、要素数としては、自由な96次元分と縮退した64次元分から 4^{96}\cdot 2^{64} と計算することができます。

以上で、各 Z/mZ での \{\bm a\} の要素数が出ました。なので、最終的な答えはそれらを掛け合わせて 25^{210}\cdot 7^{210}\cdot 3^{180}\cdot (4^{96}\cdot 2^{64})=2^{256}\cdot 3^{180}\cdot 5^{420}\cdot 7^{210} となります。

正直に言うと、要素を並び替えて規則性を見出すことを思いつくまで相当時間がかかりました。これを本番試験の時間の中で解けたら人外レベルではないかと思います。

おわりに

今回で最後の2問も終わり、これで全部解説できました。
正直解く時よりも説明を書く方が大変だった気もしますが、皆さんの参考になれば幸いです。
来年ももし全問解ければ、また解説を挙げたいと思います。

Discussion