geam1113’s diary

主にAtcoderのコンテストの備忘録を書きます。AtCoder緑と水色を行ったり来たりしています。

ABC222G 222

解説なしAC


\{1,11,111,....\}はレプユニット数という呼ばれ、その一般項は\frac{10^n-1}{9}なので、この問題の一般項は\frac{2(10^n-1)}{9}です。

 

2や9を無視できれば、10^n \equiv 1\ mod\ Kを求める問題になり、フェルマーの小定理などで解けそうという感じなので、2と9をどうにかします。

X=10^n-1とします。

 

Kに2を含む場合

XがKの倍数であるとは、XがKを因数として含んでいることと同義です。

Xの外に2があるので、Xが含む2は、Kより1つ少なくてもよく、Xは\frac{K}{2}の倍数でよくなります。

よって、K \leftarrow \frac{K}{2}とします。

 

Kに3を含む場合

Kが3を因数に含む時、Xの外に÷9があるので、Xに含まれる3は2個まで打ち消されます。

よって、Xがもつ3は、Kより2つ多い必要があり、Xは9Kの倍数である必要があります。

よって、K \leftarrow K \times 9とします。

 

10^n \equiv 1\ mod\ Kを求める

ここまでの準備ができたら、実際に10^n \equiv 1\ mod\ Kを求めます。

 

・10とKが互いに素

まず、K = 1のときは例外ケースで、答えは1です。

そうでない時、Kが素数ならフェルマーの小定理が使えますが、今回は素数とは限りません。

このような時、より一般化されたオイラーの定理が使えます。

 

正の整数a,mについて、互いに素であれば、

\boldsymbol{ a^{\phi (m)} \equiv 1 \ mod\ m}

但し、関数\phiオイラーのトーシェント関数

 

しかし、\phi (m)は、1となる最小の正の整数とは限らないので、更に以下を利用します。

 \boldsymbol{a^n \equiv 1 \ mod\ m}を満たす最小の正の整数nは、\boldsymbol{\phi (m)}の約数である。

---------------------------------------------------------------------------

証明

mは、整数nで割った商qと余りrを用いて、m=qn+rと表せる。よって、

a^{m} = a^{qn+r} = (a^{n})^q \times a^r

a^n \equiv a^m \equiv 1\ mod\ mより、

a^r \equiv 1\ mod\ m

rnで割った余りであるので、0 \leq r \lt nであり、

仮定よりna^x \equiv 1\ mod\ mを満たす最小の正の整数なので、r = 0となり、

m = nqであるため、nmの約数である。

(参考:MATHEMATICS.PDF巡回群のPDF)

-----------------------------------------------------------------------------

以上から、

\phi (K)を求める(O(\sqrt{K})

\phi (K)の約数dのうち、10^d \equiv 1\ mod\ Kを満たす最小のものを求める(O(\sqrt{K}))

ことで、解を得られます。

 

・10とKが互いに素でない

オイラーの定理などは満たしません。

そこで、元の問題10^n-1 \equiv 0\ mod\ Kに立ち返ってみます。

 

Kは2と5いずれか、または両方を因数に含んでいます。

2を含んでいる場合、その倍数の一の位は0,2,4,6,8

5をを含んでいる場合、その倍数の一の位は0,5

2と5を含んでいる場合、その倍数の一の位は0

になりますが、考えている数列はすべての項の一の位が9となるため、Kの倍数となることはあり得ません。

よって、このケースでは答えは-1です。

 

提出コード:

https://atcoder.jp/contests/abc222/submissions/26542389

 

別途、公式解説の離散対数問題について解釈した記事を書いてみたいと思います。