*[[Problem 359:http://projecteuler.net/problem=359]] 「ヒルベルトの新しいホテル」 [#o02b01ac]
ヒルベルトの最新の無限ホテルに, 無限数の客(1,2,3,...と番号付けされている)が客室を取ろうと列をなしている. ~
そのホテルは無限数のフロア(1,2,3,...と番号付けされている)を有し, またそれぞれのフロアは無限の客室(1,2,3,...と番号付けされている)を持つ.
当初, ホテルはすべて空室である. ヒルベルトは客 &tex{n}; への客室の割り当て方を次のように発表する :
&tex{n}; 番目の客は, 以下の条件のどちらかをみたす一番最小の数のフロアについて, 最初の(訳注:その時点で最小の数となる)空いている客室を取る.
- そのフロアが空いているとき
- そのフロアが空きでなく, 直前にそのフロアの客室を取った客が &tex{m}; で, &tex{m}; + &tex{n}; が完全平方数のとき
客 1 は, フロア 1 が空きなので, フロア 1 の客室 1 を取る. ~
客 2 は, 1 + 2 = 3 が完全平方数でないので, フロア 1 の客室 2 は取れない. ~
代わりに客 2 は, フロア2が空きなので, フロア 2 の客室 1 を取る. ~
客 3 は, 1 + 3 = 4 が完全平方数なので, フロア 1 の客室 2 を取る.
最終的には, 列にいたすべての客がホテルの客室を取ることができる.
客 &tex{n}; がフロア &tex{f}; の客室 &tex{r}; に泊まっている場合は &tex{n};, 誰もその客室に泊まっていないときは 0 を返す関数 P(&tex{f,r};) を定義しよう. 以下に例を示す :~
P(1, 1) = 1~
P(1, 2) = 3~
P(2, 1) = 2~
P(10, 20) = 440~
P(25, 75) = 4863~
P(99, 100) = 19454~
&tex{f}; × &tex{r}; = 71328803586048 となるようなすべての正の &tex{f}; と &tex{r}; に対し, すべての P(&tex{f, r};) の合計を求め, その最後の8桁を答えよ.