「笔记」自然数幂之和

学到许多。


定义

定义前 n 个自然数 k 次幂的和为:

Sk(n)=i=1nik


性质

Sk(n) 为关于 nk+1 次多项式。

证明考虑对 k 进行归纳。
k=0 时,Sk(n)=n,结论成立。
k=d 时:

通过二项式定理化简,提出一项相消,有:

(i+1)d+1id+1=j=0d+1(d+1j)ijid+1=j=0d(d+1j)ij

(i+1)d+1id+1 求和,有:

i=1n{(i+1)d+1id+1}=i=1nj=0d(d+1j)ij

发现 (d+1j) 只与 j 有关,调换求和顺序,有:

i=1nj=0d(d+1j)ij=j=0d(d+1j)i=1nij=j=0d(d+1j)Sj(n)

化出了有趣的玩意。
展开左侧 id+1 的求和式相消,则有:

(n+1)d+11=j=0d(d+1j)Sj(n)

提出右侧 j=d 时的 Sd(n)

(d+1d)Sd(n)=(n+1)d+1j=0d1{(d+1j)Sj(n)}1

二项式定理展开右侧,并略做处理:

Sd(n)=1d+1{j=0d+1njj=0d1{(d+1j)Sj(n)}1}

对于右侧,通过数学归纳得到 Sj(n) 为关于 nj 次多项式。
则其最高次项出现在 j=0d+1nj 中,次数为 d+1
得证。


暴力计算

看起来很快的 O(nlogk)
唯一一个复杂度依赖 n 的算法,会被卡爆。


差分法

在性质证明过程的最后,得到了一个优美的式子:

Sk(n)=1k+1{j=0k+1njj=0k1{(k+1j)Sj(n)}1}

已知 S0(n)=n,显然可以进行递推。

复杂度

显然的 O(k2)

优缺点:

优点:无。

缺点:需要求解 k+1 的逆元,模数不为质数时无法使用。
被拉格朗日插值 和 第一类斯特林数多方面吊打。


拉格朗日插值

拉格朗日插值是啥?拉格朗日插值

由性质,Sk(n) 为关于 nk+1 次多项式,需要 k+2 个点值进行构造。
可以直接取 k+1 个点,按照定义计算出 Sk(n),构造多项式。
复杂度 O(k2)?我觉得不行。

题目对选择的点并没有要求,考虑选取一段连续的点进行优化。
使 xi=i,则选择的点集为 {(i,Sk(i))iN+,ik+2}
按照定义递推出来即可,复杂度 O(klogk)

考虑要求的点 (n,Sk(n)),将其代入插值公式,有:

Sk(n)=i=1k+2Sk(i)ijnjij

发现乘积项的分母与 n 无关,提出来:

Sk(n)=i=1k+2Sk(i)ij(nj)ij(ij)

手玩一下乘积项的变化规律。

对于分母,jk+2,在已知 i 时有:

1ij(ij)=1i(i1)(i2)1×(1)(k+2i1)(k+2i)=(1)k+2i1i!(k+2i)!

可先预处理阶乘再求逆元,快速得到分母的值。

对于分子,也暴力拆一波:

ij(nj)=n(n1)(n(i1))(n(i+1))(n(k+2))=(j=1i1(nj))(j=i+1k+2(nj))

考虑维护 (nj) 的 前/后 缀积,可快速得到分子的值。

则有:

Sk(n)=i=1k+2(1)k+2iSk(i)(j=1i1(nj))(j=i+1k+2(nj))i!(k+2i)!

复杂度

O(klogk) 处理 k+2 个连续点值。
O(n) 预处理前/后 缀积,阶乘。
求逆元时可以 O(n) 预处理,也可以单次 O(logk)

总复杂度 O(klogk)

优缺点

优点:简单好写,复杂度优秀,就感觉到快。

缺点:出现了除法,需要求逆元,需保证模数为质数。


第一类斯特林数

斯特林数是啥? 斯特林数 及 斯特林反演

Sk(n)=(n+1)k+1_k+1i=0k1[ki]Si(n)

引理 1

xn_=(1)n(x)n¯

xn¯=(1)n(x)n_

以式 1 为例:

暴力展开即可,有:

xn_=i=0n1(xi)=(1)ni=0n1(xi)=(1)ni=0n1(x+i)=(1)n(x)n¯

式 2 同理可证。

引理 2

一个组合恒等式:

nk_=i=0k(1)ki[ki]ni

考虑 上升幂的性质

nk¯=i=0k[ki]ni

通过 引理 1 进行处理:

nk¯=i=0k[ki]ni(1)k(n)k_=i=0k[ki]ni

等式两侧同乘 (1)k,有:

(1)k(n)k_=i=0k[ki]ni(n)k_=i=0k[ki](1)kni

又有 ik,提出 (1)ini 相乘,有:

(n)k_=i=0k[ki](1)kni(n)k_=i=0k(1)ki[ki](n)ink_=i=0k(1)ki[ki]ni

得证。

证明

观察引理,对于右侧的求和式,i=k 时,显然 (1)ki[ki]ni=nk,则

nk=nk_i=0k1(1)ki[ki]ni

对其求和,有:

Sk(n)=i=1nik=i=1n{ik_j=0k1(1)kj[kj]ij}

拆开求和符号。

对于第一项,转化为组合数。
使用组合数性质合并,再展开组合数,有:

i=1nik_=k!i=1nik_k!=k!i=1n(ik)=k!(n+1k+1)=(n+1)k+1_k+1

对于第二项,只有 iji 有关,交换求和符号,有:

j=0k1(1)kj[kj]1nij=i=0k1[ki]Si(n)

得证。

复杂度

复杂度 O(k2)
需要预处理 k2 个第一类斯特林数。
再递推求得 S0(n),S1(n)Sk(n),单次复杂度为 O(k)

优缺点

优点:模数可以为任意值,摆脱了质数的限制。

第一项 (n+1)k+1_k+1 看起来要求逆元,但 (n+1)k+1_ 展开后至少有一项为 k+1 的倍数。
枚举 n+1?k+1 的倍数时直接除去 k+1即可。

缺点:TLE 警告。


伯努利数

e 是个什么玩意
?多项式求逆
爬了。
会了 NTT 再回来


题目

CF622F The Sum of the k-th Powers
n109,k106
只能用复杂度与 n 无关的算法过去(


写在最后

?我也不知道为什么叫差分法
可能是因为证明的时候用了 i=1n{(i+1)d+1id+1}

63 级学弟学妹来啦!

posted @   Luckyblock  阅读(1758)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示