238 : 無限長列ツアー

"Blum Blum Shub" 擬似乱数生成器を用いて数列を作る:

s0=14025256s_0 = 14025256 sn+1=(sn)2mod20300713s_{n+1} = (s_n)^2 \mod 20300713

これらの数s0s1s2s_0 s_1 s_2 \dotsを連結して無限長の数字列wwを作る。 すなわちw=14025256741014958470038053646...w = 14025256741014958470038053646...となる。

正の整数kkに対し、もし数字の合計がkkとなるwwの部分文字列が存在しないなら、p(k)p(k)を 0 と定義する。もし数字の合計がkkとなるwwの部分文字列が少なくとも一つ存在するなら、zzをそのような部分文字列の中で最も前に出てくる部分文字列の先頭の位置として、p(k)=zp(k)=zと定義する。

例えば:

部分文字列 1, 14, 1402, ... はそれぞれ数字の合計が 1, 5, 7, ... であり、 1文字めから始まるので、p(1)=p(5)=p(7)=...=1p(1)=p(5)=p(7)=...=1となる。

部分文字列 4, 402, 4025, ... はそれぞれ数字の合計が 4, 6, 11, ... であり、 2文字めから始まるのでp(4)=p(6)=p(11)=...=2p(4)=p(6)=p(11)=...=2となる。

部分文字列 02, 0252, ... はそれぞれ数字の合計が 2, 9, ... であり、 3文字めから始まるのでp(2)=p(9)=...=3p(2)=p(9)=...=3となる。

部分文字列 025 は 3 文字めから始まり数字の合計は 7 だが、より前にある(1 文字めから始まる)部分文字列が数字の合計が 7 であるため、p(7)=1p(7) = 1であって 3 ではないことに注意せよ。

0<k1030 < k ≤ 10^3ではp(k)=4742\sum p(k) = 4742であることがわかる。

0<k2×10150 < k ≤ 2 \times 10^{15}においてp(k)\sum p(k)を求めよ。

最終更新