# ARC050 C - LCM111 ## 問題リンク - https://atcoder.jp/contests/arc050/tasks/arc050_c ## 解法 ### 整理 まず, $1$を$A$個並べた数は $1+10+10^2+\cdots+10^{A-1} =\frac{10^A-1}{9}$ と書ける. 同様に, $1$を$B$個並べた数は$1+10+10^2+\cdots+10^{B-1}=\frac{10^B-1}{9}$ と書ける. したがって, 求めるべきは $$\mathrm{lcm}\left(\frac{10^A-1}{9},\frac{10^B-1}{9}\right) \bmod M$$ となる. そのまま扱うのは大変そうなので, ある程度式変形を行う. $$ \begin{aligned} \mathrm{lcm}\left(\frac{10^A-1}{9},\frac{10^B-1}{9}\right)&=\frac{\mathrm{lcm}\left(10^A-1,10^B-1\right)}{9}\\ &=\frac{\left(10^A-1\right)\left(10^B-1\right)}{9\cdot\gcd\left(10^A-1,10^B-1\right)} \end{aligned}$$ $\gcd(10^A-1,10^B-1)$ について考えよう. 非負整数 $n,m$ に対して $f(n,m)$ を $f(n,m)=\gcd(10^n-1,10^m-1)$ で定める. $f(n,m)=f(m,n)$ より $n\leq m$ として考えてよく, このとき, 等式$\gcd(x,y)=\gcd(x,y-x)$から $$ \begin{aligned} f(n,m) &=\gcd(10^n-1,10^m-1) \\ &=\gcd(10^n-1,10^m-10^n)\\ &=\gcd(10^n-1,10^n(10^{m-n}-1)) \end{aligned} $$ となる. ここで, $10^n$ と $10^n-1$ は隣り合う整数だから互いに素. よって $$ \begin{aligned} \gcd(10^n-1,10^n(10^{m-n}-1)) &=\gcd(10^n-1,10^{m-n}-1)\\ &=f(n,m-n) \end{aligned} $$ となる. これを繰り返し用いると, 以下が得られる $$f(n,m)=f(n,m \bmod n)$$ よって, $$f(n,m)=10^{\gcd(n,m)}-1$$ が成り立つ(Euclid互除法を思い出すとよい). これにより, 求めるべきは $g=\gcd(A,B)$ として $$ \frac{\left(10^A-1\right)\left(10^B-1\right)}{9\cdot\left(10^{g}-1\right)} \bmod M $$ と表せる. ### 計算 上の式をそのまま計算してもACは得られない. なぜならば, $M$ は合成数である可能性があり, その場合 $9(10^{g}-1)$ が $\bmod M$ で逆元を持つと限らないから. ここで, $g$ が $B$ を割り切ることに着目する. すると以下の式変形が行える. $$\frac{\left(10^A-1\right)\left(10^B-1\right)}{9\cdot(10^{g}-1)}=\frac{10^A-1}{10-1}\times\frac{\left(10^{g}\right)^{\frac{B}{g}}-1}{10^g-1}$$ いずれも $\frac{\alpha^k-1}{\alpha-1}$ という形だから, この値の $\bmod M$ を高速に求めることができればよい. $$\frac{\alpha^k-1}{\alpha-1}=1+\alpha+\alpha^2+\cdots+\alpha^{k-1}$$ であるから, $s_i=\frac{\alpha^i-1}{\alpha-1}=1+\alpha+\alpha^2+\cdots+\alpha^{i-1}$ とすると漸化式 $s_{i+1}=\alpha s_i+1$ が成り立つ. これを行列を用いて表すと以下のようになる. $$ \begin{pmatrix} s_{i+1} \\ 1 \end{pmatrix} = \begin{pmatrix} \alpha & 1 \\ 0 & 1 \end{pmatrix}\begin{pmatrix} s_i\\ 1 \end{pmatrix} $$ 繰り返し用いて $$ \begin{pmatrix} s_{k} \\ 1 \end{pmatrix} = \begin{pmatrix} \alpha & 1 \\ 0 & 1 \end{pmatrix}^{k}\begin{pmatrix} s_0\\ 1 \end{pmatrix} $$ $s_0=1$ であり, $\begin{pmatrix} \alpha & 1 \\ 0 & 1 \end{pmatrix}^{k}$ は繰り返し二乗法を用いれば $O(\log k)$ timeで計算可能. また, この計算は逆元を必要としていない. よって $\bmod M$ での逆元の存在を利用することなく $s_k$ の値を $O(\log k)$ timeで求めることができた. これを用いると $$\frac{10^A-1}{10-1},\frac{\left(10^{g}\right)^{\frac{B}{g}}-1}{10^g-1}$$ いずれも $O(\log \max(A,B))$ timeで計算可能. したがってこの問題を $O(\log \max(A,B))$ timeで解くことができた. ### 提出 - https://atcoder.jp/contests/arc050/submissions/54210716