Look This Editorial!

2 secs 1024 MB
RedSpica's icon RedSpica

この問題の制約下では,xn16010=6046617600000000001018x^n-1 \leq 60^{10} = 604661760000000000 \leq 10^{18}であるので, 64bit整数の範囲内に収まります. よって与えられた整数に対して求める式を実際にシュミレートすればよいです.

また,この問題の制約下では以下の定理(補題)を用いることができるので, それを用いて計算してもよいです.

LTEの補題(Lifting the Exponent lemma)

ppを素数,nnを正整数とする.ord(n)p\mathbf{ord}(n)_{p}を「nnppで割り切ることのできる最大の回数」と定義します.

例えばord(9)3=2\mathbf{ord}(9)_{3}=2ord(16)2=4\mathbf{ord}(16)_{2}=4ord(10)3=0\mathbf{ord}(10)_{3}=0 などです.

奇素数ppに対し,正整数x,yx,yxymodpx \equiv y \mathbf{mod}pであってx≢0modpx \not\equiv 0 \mathbf{mod}pを満たすとき, 任意の正整数nnに対して以下の等式が成立する.

  • ord(xnyn)p=ord(xy)p+ord(n)p\mathbf{ord}(x^n-y^n)_p = \mathbf{ord}(x-y)_p + \mathbf{ord}(n)_p

愚直にシュミレートする場合の時間計算量はO(log(n)+nlog(x))O(\mathbf{log}(n)+n\mathbf{log}(x)), LTEの補題を用いる場合はO(log(x)+log(n))O(\mathbf{log}(x)+\mathbf{log}(n))でどちらも十分高速です. ただしLTEの補題を用いる場合は,x=1x=1の場合に注意してください.