サイコロが手元にあったので、回しながら考えた。まずはバーンサイドの補題を思い出す:
- 群
が集合 に作用するとする。この時、作用に関する同値類の総数は次の数に等しい:
- ただし、
は のfix、つまり 。
したがって、正六面体に対する回転操作で回転前と回転後が重なるものを列挙して、各回転に関するfixの大きさを求めればよい。正六面体に対する回転を分類すると以下の通り:
: 恒等変換、つまり何もしない。1通り。 : ある面の中心 と向かいにある面の中心 を結ぶ直線を軸に 回転する。どちら向きに回転するか述べていないが、ベクトルとみなして反時計回りに回転するとすると、 と で別の回転になって 通りある。 : ある面の中心 と向かいにある面の中心 を結ぶ直線を軸に 回転する。3通り。 : ある辺の中心 と向かいにある辺の中心 を結ぶ直線を軸に 回転する。辺対が6ペアあるので6通り。 : ある頂点 と向かいにある頂点 を結ぶ直線を軸に 回転する。頂点対が ペアあって、やはり回転する方向が2通りあるので 通り。
合わせて24通りあるので、fixの大きさを求めて全部足して24で割ればよいことになる。上の回転によってどの面とどの面が重なるかを調べると、以下の数え上げをすればよいことがわかる:
: の正整数解の総数を求めることに等しい。 : の正整数解の総数を求めることに等しい。 : の正整数解の総数を求めることに等しい。 : の正整数解の総数を求めることに等しい。 : の正整数解の総数を求めることに等しい。
たとえば
見て何をすればよいかはわかったが、WolframAlphaがなければコンテスト中にはACできていなかった。結局は計算力なんだよな。
https://q.c.titech.ac.jp/docs/progs/polynomial_division.html
そもそも母関数が書けた時点で貼るだけになるらしい。というか、これを知らなくても漸化式に直して行列累乗はできるのでそれは考えるべきだった。