记 Sm(n)=∑i=1nim,求 Sm(n)modP。
n≤109,m≤103
拉格朗日插值
把 1,2,⋯,m+2 插值即可
i=1∑nim=i=1∑m+2Sm(i)j=i∏i−jn−j
预处理
prei=j=1∏in−j,sufi=j=i∏m+2n−j
和阶乘逆元。
进一步
i=1∑nim=i=1∑m+2Sm(i)(i−1)!(m+2−i)!(−1)m+2−iprei−1sufi+1
直接求 Sm(1)∼Sm(m+2) 是 O(mlogm) 的,注意 im 是完全积性函数,可以只对质数使用快速幂,其他的用欧拉筛推出来,复杂度 O(m)。
第二类斯特林数
i=0∑nim=i=1∑m{im}i+11(n+1)i+1
预处理
{00}{mn}=1={m−1n−1}+m{mn−1}
复杂度 O(m2),好处是可以不用求逆元,在 P 不是质数时也管用。
伯努利数
i=1∑nim=m+11i=0∑m(im+1)Bi(n+1)m+1−i
其中 Bn 表示 第一伯努利数。
预处理
B0=1i=0∑m(im+1)Bi=0
O(m2) 预处理完后可以 O(m) 询问。
伯努利数更强大的功能是 O(mlogm) 对所有 1∼m 都计算出答案。
伯努利数的指数型生成函数
k=0∑∞Bkk!xk=ex−1x
通过多项式求逆可以得到伯努利数,再通过卷积可以对所有 1∼m 都计算出答案。