No.213
素数サイコロだけを 個振ったときに出る目の合計が となる組み合わせの数 と合成数サイコロだけを 個振ったときに出る目の合計が となる組み合わせの数 をそれぞれ全探索で求める.
このとき, すべてのサイコロを振ったときに出る目の合計が となる組み合わせの数を とすると,
で計算できる. は最大 である.
さて, すごろくで のマスに到達する組み合わせの数を とする. ただし, ゴールを超えたマスも対象する. このとき,
s.t.
となる. これを順に計算すればいいのだが, が大きいので愚直に計算すると間に合わない.
そこで, コンパニオン行列を使う.
となるので, は愚直に計算し, はコンパニオン行列の累乗を繰り返し2乗法で計算し, は愚直に計算する.
の和が答えとなる.
…という方法だと計算量が となり, 微妙に間に合わなかった.
そこで, まず の和を求めるのを だけ求めればいいようにする.
これは, から進む方向で考えるのではなく, から戻る方向で考えて に到達する組み合わせの数を考えればいい. ただし, の位置から1手目は 未満にたどり着かなくてはならない.
そして, を マス進んだときの組み合わせの数ではなく, 残り マスの地点にたどり着く組み合わせの数と考えれば,
s.t.
となる.
のときはこれを愚直に計算し, のときは を愚直に計算し, あとはきたまさ法で計算すれば, 計算量は となる.