E - Simple Division Editorial by Magentor

行列累乗

公式解説の内容を前提とします。目標は、\(1\)\(n\) 個並べたレピュニットを \(R_n\) とするとき、\(R_n\)\(10007 \times M\) で割った余りを高速に計算することです。

以降、法を \(10007 \times M\) とします。ここで、\(R_{n+1} = 10 \times R_n + 1\) が成立します。

よって、\(\begin{pmatrix}R_{n+1} \\ 1\end{pmatrix} =\begin{pmatrix}10 & 1 \\0 & 1\end{pmatrix}\begin{pmatrix}R_{n} \\ 1\end{pmatrix} \) が成立します。

後は、\(\begin{pmatrix}10 & 1 \\0 & 1\end{pmatrix}^X\) を求めればよく、これは繰り返し二乗法の要領で \(O(\log X)\) で求めることができます。よって、この問題を解くことができました。

posted:
last update: