概要

考察に詰まったら,手を動かして実験してみましょう.

問題原案:uni_kakurenbo

解説

PQP \leq Q としても一般性は保たれますから,以下は PQP \leq Q とします.

xmodP<PQx \bmod P < P \leq Q より (xmodP)modQ=xmodP(x \bmod P) \bmod Q = x \bmod P ですから,条件 xmodP=(xmodQ)modPx \bmod P = (x \bmod Q) \bmod P を満たす KK 未満の非負整数 xx の個数を求めればよいです.

非負整数 kk に対して kQx<(k+1)QkQ \leq x < (k + 1)Q の場合を考えます.(これですべての場合を網羅できます.)

xmodQ=xkQx \bmod Q = x - kQ より, kQmodP=0kQ \bmod P = 0 すなわち kQkQPP の倍数であることが必要十分です.
これは kkPgcd{P,Q}\frac{P}{\gcd \, \{\, P,\,Q \,\}} の倍数であると言い換えることができます.

以上より,周期 QPgcd{P,Q}=lcm{P,Q}Q\frac{P}{\gcd \, \{\, P,\,Q \,\}} = \mathrm{lcm} \, \{\, P,\,Q \,\} ごとに,幅 QQ の区間で条件を満たす xx が現れるとわかりました.

したがって答えは QKlcm{P,Q}+min{Q,Kmodlcm{P,Q}}Q \left \lfloor \frac{K}{\mathrm{lcm}\, \{\, P,\,Q \,\}} \right \rfloor + \min \, \{\, Q, K \bmod \mathrm{lcm} \, \{\, P,\,Q \, \} \,\} です.

解説:uni_kakurenbo

実装例

C++
Python