この問題の制約下では,xn−1≤6010=604661760000000000≤1018であるので,
64bit整数の範囲内に収まります.
よって与えられた整数に対して求める式を実際にシュミレートすればよいです.
また,この問題の制約下では以下の定理(補題)を用いることができるので,
それを用いて計算してもよいです.
LTEの補題(Lifting the Exponent lemma)
pを素数,nを正整数とする.ord(n)pを「nをpで割り切ることのできる最大の回数」と定義します.
例えばord(9)3=2,ord(16)2=4,ord(10)3=0
などです.
奇素数pに対し,正整数x,yがx≡ymodpであってx≡0modpを満たすとき,
任意の正整数nに対して以下の等式が成立する.
- ord(xn−yn)p=ord(x−y)p+ord(n)p
愚直にシュミレートする場合の時間計算量はO(log(n)+nlog(x)),
LTEの補題を用いる場合はO(log(x)+log(n))でどちらも十分高速です.
ただしLTEの補題を用いる場合は,x=1の場合に注意してください.