A=a1a2am,B=b1b2bnA=a_1a_2\cdots a_m,B=b_1b_2\cdots b_nとします。PQ=0.a1a2amb1˙b2bn1bn˙=110m(a1a2am+0.b1˙b2bn1bn˙)\displaystyle\frac{P}{Q}=0.a_1a_2\cdots a_m\dot{b_1}b_2\cdots b_{n-1}\dot{b_n}=\displaystyle\frac{1}{10^m}(a_1a_2\cdots a_m+0.\dot{b_1}b_2\cdots b_{n-1}\dot{b_n})であり、c=0.b1˙b2bn1bn˙c=0.\dot{b_1}b_2\cdots b_{n-1}\dot{b_n}とすると、10ncc=b1b2bn=B10^nc-c=b_1b_2\cdots b_n=Bよりc=B10n1c=\displaystyle\frac{B}{10^n-1}です。よって、PQ=110m(A+B10n1)=(10n1)A+B10m(10n1)\displaystyle\frac{P}{Q}=\displaystyle\frac{1}{10^m}\left(A+\displaystyle\frac{B}{10^n-1}\right)=\displaystyle\frac{(10^n-1)A+B}{10^m(10^n-1)}より10m(10n1)P=Q{(10n1)A+B}10^m(10^n-1)P=Q\left\{(10^n-1)A+B\right\}となります。

PPQQは互いに素なので、10m(10n1)10^m(10^n-1)QQの倍数です。よって、Q=2s5tuQ=2^s\cdot 5^t\cdot us,ts,t00以上の整数、uu2,52,5と互いに素な自然数)とすると、mmの最小値はmax(s,t)\max(s,t)です。また、10n110^n-1uuの倍数となるので、これを満たすnnの最小値を離散対数を用いて求めれば良いです。

計算量は、mmを求めるのにO(logQ)O(\log Q)nnを求めるのにO(Q)O(\sqrt{Q})かかるので、全体でO(Q)O(\sqrt{Q})となります。(上記のリンクに載っているコードではO(QlogQ)O(\sqrt{Q}\log Q)ですが、今回はそれでも十分間に合います。)

質問・誤りがある場合

Twitterに連絡ください。ID : @YS55749378