专题——自然数幂和 详解

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

自然数幂和,有许多种解决方法,其中最典型的有下面几种。

Description

∑i=1nik\sum_{i=1}^n i^ki=1nik

由于答案可能过大,请将其对109+710^9+7109+7取模。

法1: 暴力

时间复杂度 O(nlog⁡k)O(n \log k)O(nlogk)

法2: 线性筛

不难发现 f(i)=ikf(i)=i^kf(i)=ik完全积性函数

于是我们直接线性筛即可。时间复杂度为 O(nln⁡nlog⁡k+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=1nik=i=0k+1fi ni

现在关键在于如何求出fif_ifi。我们可以令i=1,2……k+2i=1,2……k+2i=1,2k+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(n1,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=12n(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=1pj=0

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值