Problem A - De-RNG-ed

問題

線形合同法 (Si+1 := (A * Si + B) mod P) により生成された疑似乱数が K 項と,その上限桁数を定める D が与えられる.このとき,この乱数系列が次に生成する項を決定できるか?
ただし,P≦10D素数,A,B は負でない整数である.

考え方

Incorrect 貰ったのはコーディング的な問題っぽい.
とりあえず上限までの素数リストは最初に作っておく.適当に作ったところで 100ms かからないはず.
あと簡単な枝刈りとして,K=1 だと不明が確定し,S0=S1 の場合は同じ値の連続することも分かる.あとは K=2 で 2 値が違う場合は不明が確定する.なので以下では K>2 を仮定する.

P が決まっているとして,3 項 S0, S1, S2 の関係は
S1 ≡ a * S0 + b
S2 ≡ a * S1 + b ≡ a2 * S0 + b * (1 + a)
なので
D1 = S1 - S0 ≡ (a-1) * S0 + b
D2 = S2 - S1 ≡ a * *1=O(10D/D).

*1:a-1) * S0 + b) = a * D1 を考えると a≡D2・D1-1 がわかり,そのまま b も決まるので SK-1 から SK が求められる. あとは許容範囲の素数 P (max(Si)<P≦10D) 全てでこの結果が一致するのか,というチェックをすれば OK.↑が O(1) なので全体もせいぜい O(π(10D