求
∑i=1nikmodp
高斯消元
一个定理,k次方和一定可以由0~k-1次方和表示出来,设方程组解出来就好了。
O(k3)
倍增
我们设
f(n,k)=∑i=1nik
怎么算呢?
我们采用分治思想。
如果n是奇数那么
f(n,k)=f(n−1,k)+nk
否则,我们可以先求出n/2的f,然后对于n/2+1~n中的每个数都可以表示为n/2+i
那么
f(n,k)=f(n/2,k)+∑i=1n/2(n/2+i)k
二项式定理
f(n,k)=f(n/2,k)+∑i=1n/2∑j=0kCjk(n/2)k−jij
调换一下
f(n,k)=f(n/2,k)+∑j=0kCkjf(n/2,j)(n/2)k−j
O(k2lognlogk)
第一类斯特林数
S(n,k)=∑i=1nik
引入 第一类斯特林数
Pnm=∑i=0nSs(n,i)mi
发现
jk=Ss(k,k)jk
于是
jk=k!Ckj−Pkj+Ss(k,k)jk
jk=k!Ckj−(Pkj−Ss(k,k)jk)
观察括号内的式子
Pkj−Ss(k,k)jk=∑i=0kSs(k,i)ji−Ss(k,k)jk
Pkj−Ss(k,k)jk=∑i=0k−1Ss(k,i)ji
于是
jk=k!Ckj−∑i=0k−1Ss(k,i)ji
S(n,k)=∑j=1n(k!Ckj−∑i=0k−1Ss(k,i)ji)
S(n,k)=k!∑j=1nCkj−∑i=0k−1∑j=1nSs(k,i)ji
S(n,k)=k!Ck+1n+1−∑i=0k−1Ss(k,i)∑j=1nji
S(n,k)=Pk+1n+1k+1−∑i=0k−1Ss(k,i)S(n,i)
减号前面暴力做就好了。因为它是k+1个连续自然数相乘,必然会有k+1这个因数。预处理Ss,递推S。 O(k2)