391 : ホッピングゲーム (*)

00からkkまでの数を2進法で書き下したときの1の個数をsks_kとしよう。 例えば、00から55までを2進法で書くと0,1,10,11,100,1010, 1, 10, 11, 100, 101となる。7つの1があるのでs5=7s_5 = 7となる。 数列S={skk0}S = \{s_k \, | \, k \geq 0\}{0,1,2,4,5,7,9,12,}\{0, 1, 2, 4, 5, 7, 9, 12, \dots\}で始まる数列となる。

2人で行うゲームがある。ゲーム開始前に、ある数nnを選んでおく。カウンタccがあり、それは00から始まる。それぞれの局面で、対局者は11からnnまで(nnを含む)のある数を選び、その数だけccを増やす。その結果得られるccの値は数列SSの要素でなければならない。もしそのような有効な指し手を打てない場合、対局者は負けとなる。

例を示そう: n=5n = 5とし、cc00から始まる。 先手は44を選び、cc0+4=40 + 4 = 4となる。 後手は55を選び、cc4+5=94 + 5 = 9となる。 先手は33を選び、cc9+3=129 + 3 = 12となる。 以下同様 留意すべき点として、ccは常にSSに属していなければならない、そしてそれぞれの対局者はたかだかnnまでの数でccを増加させていくことができる。

先手必勝となるように先手が最初の局面で選べる一番大きい数字をM(n)M(n)とし、そしてそのような指し手がない場合はM(n)=0M(n) = 0としよう。例えばM(2)=2,M(7)=1,M(20)=4M(2) = 2, M(7) = 1, M(20) = 4となる。

1n201 \leq n \leq 20に対するM(n)3=8150\sum M(n)^3 = 8150がすでに与えられている。

1n10001 \leq n \leq 1000に対するM(n)3\sum M(n)^3を求めよ。

(* 数列Sの表記法がどう見ても集合。)

最終更新