写在这里,目的是在以后需要看的时候不用再去网上抄(划掉)
求
s
(
n
)
=
∑
i
=
1
n
i
k
求s(n)=\sum_{i=1}^n i^k
求s(n)=i=1∑nik
拉格朗日插值法
给定若干个点值,(x0,y0),(x1,y1),(xn,yn),它们的差值多项式
L
(
x
)
=
∑
i
=
0
n
y
i
∗
∏
j
≠
i
x
−
x
j
x
i
−
x
j
L(x)=\sum_{i=0}^nyi*\prod_{j\neq i}{x-xj\over xi-xj}
L(x)=i=0∑nyi∗j̸=i∏xi−xjx−xj
听说自然数幂和可以表示为k+1次多项式函数。
求自然数幂和的时候,就直接取点值为(0,s(0)),(1,s(1)),(k+1,s(k+1))
于是
L
(
n
)
=
∑
i
=
0
k
+
1
s
(
i
)
∗
∏
j
≠
i
n
−
j
i
−
j
L(n)=\sum_{i=0}^{k+1}s(i)*\prod_{j\neq i}{n-j\over i-j}
L(n)=i=0∑k+1s(i)∗j̸=i∏i−jn−j
L
(
n
)
=
∑
i
=
0
k
+
1
s
(
i
)
∗
(
−
1
)
k
+
1
−
i
n
(
n
−
1
)
.
.
.
(
n
−
i
+
1
)
(
n
−
i
−
1
)
.
.
.
(
n
−
k
−
1
)
i
!
(
k
+
1
−
i
)
!
L(n)=\sum_{i=0}^{k+1}s(i)*(-1)^{k+1-i}{n(n-1)...(n-i+1)(n-i-1)...(n-k-1)\over i!(k+1-i)!}
L(n)=i=0∑k+1s(i)∗(−1)k+1−ii!(k+1−i)!n(n−1)...(n−i+1)(n−i−1)...(n−k−1)
预处理k以内的自然数幂和,求个逆元就好了。
复杂度
O
(
k
)
O(k)
O(k)
第二类斯特林数法
但是如果不能求逆元
有第二类斯特林数
{
n
k
}
\left\{ ^k_n \right\}
{nk}为将k个无区别的球放入n个有区别的非空盒子的方案数
所以
k
2
k^2
k2转移显然:
{
n
k
}
=
{
n
−
1
k
−
1
}
+
n
{
n
k
−
1
}
\left\{ ^k_n \right\}=\left\{ ^{k-1}_{n-1} \right\}+n\left\{ ^{k-1}_{ n} \right\}
{nk}={n−1k−1}+n{nk−1}
已知
n
k
=
∑
i
=
0
k
{
i
k
}
∗
n
i
‾
n^k=\sum_{i=0}^k \left\{ ^k_i \right\}*n^{\underline i}
nk=i=0∑k{ik}∗ni
可以用组合意义理解:
左边是k个无区别的球随意放入n个有区别盒子,右边为枚举放入了几个盒子,用斯特林数算出放球的方案,下降幂为选盒子。
那么
∑
i
=
1
n
i
k
=
∑
j
=
1
n
∑
i
=
0
k
{
i
k
}
∗
j
i
‾
\sum_{i=1}^n i^k=\sum_{j=1}^n\sum_{i=0}^k \left\{ ^k_i \right\}*j^{\underline i}
i=1∑nik=j=1∑ni=0∑k{ik}∗ji
=
∑
i
=
0
k
{
i
k
}
∑
j
=
1
n
j
i
‾
=\sum_{i=0}^k \left\{ ^k_i \right\}\sum_{j=1}^nj^{\underline i}
=i=0∑k{ik}j=1∑nji
=
∑
i
=
0
k
{
i
k
}
i
!
∑
j
=
1
n
C
j
i
=\sum_{i=0}^k \left\{ ^k_i \right\}i!\sum_{j=1}^nC_j^i
=i=0∑k{ik}i!j=1∑nCji
=
∑
i
=
0
k
{
i
k
}
i
!
C
n
+
1
i
+
1
=\sum_{i=0}^k \left\{ ^k_i \right\}i!C_{n+1}^{i+1}
=i=0∑k{ik}i!Cn+1i+1
这样的话就不用逆元了,复杂度是
O
(
k
2
)
O(k^2)
O(k2)