解説

1995年の京都大学文系後期第四問の内容を拡張した問題となっています。nn の値をfor文で回せば解けますが、どの範囲で回せばよいのでしょうか?

一旦f(n)f(n)を整理してみます。

f(n)=1n+2n+...+pn(modf(n) = 1^n + 2^n + ... + p^n (mod p)p)

ここで唐突にフェルマーの小定理を思い出してください。

ap11(moda^{p-1} \equiv 1 (mod p)apap) \Leftrightarrow a^p \equiv a ( aapp と互いに素 )

これにより、knk(np+1)k^n \equiv k^{(n-p+1)} が成り立つので f(n)f(np+1)f(n) \equiv f(n-p+1) となり、結局 np1n \leq p-1 の範囲でだけ nn を回せばよいと分かります。

時間計算量は1つの nn について f(n)f(n) を求めるのに O(plog(p))O(plog(p)) かかるので、O(p2log(p))O(p^2log(p)) となります。

別解

実は、f(n)f(n) modmod pp の最大値は n0(modn \equiv 0 (mod p1)p-1) のときで p1p-1 となります。これは、先ほどのフェルマーの小定理 ap11(moda^{p-1} \equiv 1 (mod p)p) ( aapp と互いに素 ) を用いることで f(n)=1×(p1)+pn(modf(n) = 1 \times (p-1) + p^n (mod p)p1p) \equiv p-1f(n)f(n) を式変形して示せます。

余談ですが、n0(modn \equiv 0 (mod p1)p-1) でないときは f(n)f(n) modmod pp の値が 00 となります。これは巡回群の性質から示せますが、私もそんなに理解できていません。