自然数幂和,有许多种解决方法,其中最典型的有下面几种。
Description
求∑i=1nik\sum_{i=1}^n i^ki=1∑nik
由于答案可能过大,请将其对109+710^9+7109+7取模。
法1: 暴力
时间复杂度 O(nlogk)O(n \log k)O(nlogk) 。
法2: 线性筛
不难发现 f(i)=ikf(i)=i^kf(i)=ik 是完全积性函数。
于是我们直接线性筛即可。时间复杂度为 O(nlnnlogk+n)O(\frac {n \ln n} {\log k}+n)O(logknlnn+n) ,类线性。
法3: 高斯消元
可以发现,答案是一个k+1k+1k+1次多项式,即∑i=1nik=∑i=0k+1fi ni\sum_{i=1}^n i^k=\sum_{i=0}^{k+1} f_i\ n^ii=1∑nik=i=0∑k+1fi ni
现在关键在于如何求出fif_ifi。我们可以令i=1,2……k+2i=1,2……k+2i=1,2……k+2,分别得到一组点值,然后高斯消元即可。
最后,我们将多项式的各项系数带入即可求出答案。
法4: 分治
定义函数f(n,k)=∑i=1nikf(n,k)=\sum_{i=1}^n i^kf(n,k)=∑i=1nik。
如果nnn为奇数,那么f(n,k)=f(n−1,k)+nkf(n,k)=f(n-1,k)+n^kf(n,k)=f(n−1,k)+nk。
如果nnn为偶数,那么f(n,k)=f(n2,k)+∑i=1n2(i+n2)kf(n,k)=f(\frac n 2,k)+\sum_{i=1}^{\frac n 2} (i+\frac n 2)^kf(n,k)=f(2n,k)+i=1∑2n(i+2n)k
令p=n2p=\frac n 2p=2n,用二项式定理拆开:
f(p,k)+∑i=1p(i+p)kf(p,k)+\sum_{i=1}^{p} (i+p)^kf(p,k)+∑i=1p(i+p)k
=f(p,k)+∑i=1p∑j=0kijpk−j Ckj=f(p,k)+\sum_{i=1}^p \sum_{j=0}^k i^j p^{k-j}\ C_k^j=f(p,k)+∑i=1p∑j=0

博客介绍了自然数幂和的七种解决方法,包括暴力、线性筛、高斯消元、分治、递推、拉格朗日插值和生成函数。详细阐述了各方法的原理及时间复杂度,这些方法循序渐进,复杂度从差到优,实现从易到难,考场上可按需选择。
最低0.47元/天 解锁文章
462

被折叠的 条评论
为什么被折叠?



