Description
Input
一行两个整数k,p。
Output
一行一个整数表示答案。
Sample Input
1 3
Sample Output
6
Data Constraint
对于20%的数据:k∗p<=105k*p<=10^5k∗p<=105
对于另外20%的数据 k=1k=1k=1
对于70%的数据:k∗p<=109k*p<=10^9k∗p<=109
对于100%的数据:k,p<=109k,p<=10^9k,p<=109
题解
这题一看就是一道不友好的题。
前%40暴力+打表
%70题解说:发挥人类智慧。
然而并不会做
%100
解法一:简单自然的找规律,可以发现一些周期或是别的神奇的东东。
解法二:推式子。
我们看到题目要求:
∑i=1k∗pi2∗p−1modp2\sum_{i=1}^{k*p}i^{2*p-1} mod p^2∑i=1k∗pi2∗p−1modp2
放在前面:我们要推一个前置知识。
二项式展开:
(a+b)n=∑i=0nCni∗an−i∗bi(a+b)^n=\sum_{i=0}^{n}C_{n}^{i}*a^{n-i}*b^i(a+b)n=∑i=0nCni∗an−i∗bi
然后我们要证明:
∑i=1p−1i2p−1≡p(p+1)/2(modp2)\sum_{i=1}^{p-1}i^{2p-1}\equiv p(p+1)/2(mod p^2)∑i=1p−1i2p−1≡p(p+1)/2(modp2)
过程:
∑i=1p−1i2p−1+∑i=1p−1i2p−1≡p(p+1)(modp2)\sum_{i=1}^{p-1}i^{2p-1}+\sum_{i=1}^{p-1}i^{2p-1}\equiv p(p+1)(modp^2)∑i=1p−1i2p−1+∑i=1p−1i2p−1≡p(p+1)(modp2)
∑i=1p−1i2p−1+∑i=1p−1(p−i)2p−1≡p(p+1)(modp2)\sum_{i=1}^{p-1}i^{2p-1}+\sum_{i=1}^{p-1}{(p-i)}^{2p-1}\equiv p(p+1)(modp^2)∑i=1p−1i2p−1+∑i=1p−1(p−i)2p−1≡p(p+1)(modp2)
∑i=1p−1i2p−1+(p−i)2p−1≡p(p+1)(modp2)\sum_{i=1}^{p-1}{i}^{2p-1}+{(p-i)}^{2p-1}\equiv p(p+1)(modp^2)∑i=1p−1i2p−1+(p−i)2p−1≡p(p+1)(modp2)
∑i=1p−1i2∗p−1−∑j=02p−1C2p−1j∗(−i)2p−1−j∗pj≡p(p+1)(modp2)\sum_{i=1}^{p-1}{i}^{2*p-1}-\sum_{j=0}^{2p-1}C_{2p-1}^j*(-i)^{2p-1-j}*p^{j}\equiv p(p+1)(modp^2)∑i=1p−1i2∗p−1−∑j=02p−1C2p−1j∗(−i)2p−1−j∗pj≡p(p+1)(modp2)
由于当j>=2时,后面的式子是没有用的“∑j=02p−1C2p−1j∗(−i)2p−1−j∗pj\sum_{j=0}^{2p-1}C_{2p-1}^j*(-i)^{2p-1-j}*p^{j}∑j=02p−1C2p−1j∗(−i)2p−1−j∗pj”(模意义下)
所以设后面的式子值为:S
当j=0时S=−1∗1∗i2p−1S=-1*1*i^{2p-1}S=−1∗1∗i2p−1
当j=1时S=(2p−1)∗i2p−2∗pS=(2p-1)*i^{2p-2}*pS=(2p−1)∗i2p−2∗p
得到:
∑i=1p−1i2p−1−i2p−1+(2p−1)∗p∗i2p−2≡p(p+1)(modp2)\sum_{i=1}^{p-1}{i}^{2p-1}-i^{2p-1}+(2p-1)*p*i^{2p-2}\equiv p(p+1)(modp^2)∑i=1p−1i2p−1−i2p−1+(2p−1)∗p∗i2p−2≡p(p+1)(modp2)
∑i=1p−1(2p−1)∗p∗i2p−2≡p(p+1)(modp2)\sum_{i=1}^{p-1}(2p-1)*p*i^{2p-2}\equiv p(p+1)(modp^2)∑i=1p−1(2p−1)∗p∗i2p−2≡p(p+1)(modp2)
∑i=1p−1(2p−1)∗i2p−2≡p+1(modp)\sum_{i=1}^{p-1}(2p-1)*i^{2p-2}\equiv p+1(modp)∑i=1p−1(2p−1)∗i2p−2≡p+1(modp)(由于两边同时除p,模数也要除p)
因为费马小定理:ap−1≡1(modp)(p为质数)a^{p-1}\equiv 1 (mod p)(p为质数)ap−1≡1(modp)(p为质数)
所以i2p−2=i2(p−1)=(i2)p−1≡1(modp)i^{2p-2}=i^{2(p-1)}={(i^2)}^{p-1}\equiv 1(modp)i2p−2=i2(p−1)=(i2)p−1≡1(modp)
所以原来就变成了:
∑i=1p−12p−1≡p+1(modp)\sum_{i=1}^{p-1}2p-1\equiv p+1(modp)∑i=1p−12p−1≡p+1(modp)
(p−1)(2p−1)≡p+1(modp)(p-1)(2p-1)\equiv p+1(mod p)(p−1)(2p−1)≡p+1(modp)(去掉西格玛)
2p2−4p+1≡1(modp)2p^2-4p+1\equiv 1(mod p)2p2−4p+1≡1(modp)(拆出来)
由于是模p意义下,所以变成了:1≡1(modp)1\equiv1(mod p)1≡1(modp)
得证。
那么回到题目:
∑i=1kpi2p−1modp2\sum_{i=1}^{kp}i^{2p-1} mod p^2∑i=1kpi2p−1modp2
∑i=1k∑j=1p[(i−1)∗p+j]2p−1modp2\sum_{i=1}^{k}\sum_{j=1}^{p}[(i-1)*p+j]^{2p-1} mod p^2∑i=1k∑j=1p[(i−1)∗p+j]2p−1modp2(拆开西格玛)
我们发现,可以把(i-1)在前面西格玛替换一下,而且由于j=p时,modp2modp^2modp2为0
所以变成:
∑i=0k−1∑j=1p−1(i∗p+j)2p−1modp2\sum_{i=0}^{k-1}\sum_{j=1}^{p-1}(i*p+j)^{2p-1} mod p^2∑i=0k−1∑j=1p−1(i∗p+j)2p−1modp2
熟悉的二项式展开:
∑i=0k−1∑j=1p−1[j2p−1+(2p−1)∗i∗p∗j2p−2]modp2\sum_{i=0}^{k-1}\sum_{j=1}^{p-1}[j^{2p-1}+(2p-1)*i*p*j^{2p-2}] mod p^2∑i=0k−1∑j=1p−1[j2p−1+(2p−1)∗i∗p∗j2p−2]modp2
整理一下:
∑i=0k−1∑j=1p−1j2p−1+∑i=0k−1∗i∗∑j=1p−1(2p−1)∗j2p−2∗p(modp2)\sum_{i=0}^{k-1}\sum_{j=1}^{p-1}j^{2p-1}+\sum_{i=0}^{k-1}*i*\sum_{j=1}^{p-1}(2p-1)*j^{2p-2}*p (mod p^2)∑i=0k−1∑j=1p−1j2p−1+∑i=0k−1∗i∗∑j=1p−1(2p−1)∗j2p−2∗p(modp2)
左边可以根据上面证明:得∑i=0k−1p(p+1)/2=kp(p+1)/2\sum_{i=0}^{k-1}p(p+1)/2=kp(p+1)/2∑i=0k−1p(p+1)/2=kp(p+1)/2
右边可以根据上面证明过程中的结论化简,得:
∑i=0k−1∗i∗p∗(p+1)=k∗(k−1)∗p∗(p+1)/2\sum_{i=0}^{k-1}*i*p*(p+1)=k*(k-1)*p*(p+1)/2∑i=0k−1∗i∗p∗(p+1)=k∗(k−1)∗p∗(p+1)/2
那么答案就是:kp(p+1)/2+k∗(k−1)∗p∗(p+1)/2(modp2)kp(p+1)/2+k*(k-1)*p*(p+1)/2( mod p^2)kp(p+1)/2+k∗(k−1)∗p∗(p+1)/2(modp2)
化简:k2∗p∗(p+1)/2(modp2)k^2*p*(p+1)/2(mod p^2)k2∗p∗(p+1)/2(modp2)
用快(gui)速乘解决即可。
var
i,j,k,l,n,m:longint;
p,q,ans,answer,mo:int64;
function tsm(a,b:int64):int64;
var
i,j,k,l:int64;
begin
l:=0;
while b>0 do
begin
if b and 1>0 then l:=(l+a) mod mo;
b:=b div 2;
a:=(a*2) mod mo;
end;
exit(l);
end;
begin
readln(q,p);
mo:=p*p;
writeln(tsm(tsm(tsm(q,q),p),(p+1) div 2));
end.