解説
∑i<j(Ai+Aj)p の値をそのまま求めようとすると、nC2 通りを全探索する必要があるため累乗計算を含めて O(N2logp) かかり実行時間制限に間に合いません。よって、計算量の改善を考えます。
ここで、(Ai+Aj)p を変形してみます。
(Ai+Aj)p=k=0∑p(pk)Aip−kAjk
この値は、k=0,p のときそれぞれ Aip,Ajp となり、 k の値がそれ以外のときは二項係数の素因数に必ず p を含むため p の倍数になります。
よって、∑i<j(Ai+Aj)p≡∑i<j(Aip+Ajp) (mod p)
が成り立ちます。ここで、Aip は、この和の中に N−1 回出てくるため、∑i<j(Aip+Ajp)=(N−1)i=1∑NAip です。
したがって、答えは (N−1)∑i=1NAip を p で割った余りとなります。時間計算量は累乗計算を含めて O(Nlogp) であり、実行時間制限に間に合います。よって、この問題を解くことができました。
追記
∑i<j(Ai+Aj)p≡∑i<j(Aip+Ajp) (mod p) の変形は、1年生の夢 と呼ばれる実数範囲では成り立たない等式 (a+b)p=ap+bp が本当に成り立ってしまうケースです。この等式は p が素数であり、かつ mod p の世界であれば成り立つことが知られています。