听说一个人的数论要用伯努利数处理自然数幂和,然而我之前只会插值,吓得跑去学了一下自然数幂和 .
附录 — 前置知识
插值相关:看我的博客 link(旧文慎入) .
第二类斯特林数相关:
定义:第二类斯特林数 {nk} 表示 n 个有标号小球放入 k 个无标号集合,每个集合都非空的方案数 .
然后根据组合意义(这个证明和二项式系数那个差不多),可以得到递推式:
{nk}=k{n−1k}+{n−1k−1}
然后这个可以 O(n2) 递推 .
普通幂转下降幂(后面会说)
nk=k∑i=0{ki}ni–
套二项式反演(你也可以看成套了一个容斥),然后变成
{nm}=1m!m∑i=0(−1)i(mi)(m−i)n
是不是卷积的形式 .
于是可以 O(nlogn) 卷积求一行 .
伯努利数相关:
伯努利数 {B} 是如下定义的有理数序列:
n∑i=0(n+1i)Bi=0
其中 B0=1 .
然后可以根据定义 O(n2) 求 .
我们考虑整出它的 EGF .
显然式子是不是可以改成
n∑i=0(n+1i)Bi=[n=0]
做一些平凡的操作:
n∑i=0(n+1i)Bi=[n=0]⟺n+1∑i=0(n+1i)=Bn+1+[n=0]⟺n∑i=0(ni)=Bn+[n=1]⟺Bnn!+[n=1]=n∑i=01(n−i)!⋅Bii!
这就有点 EGF 的样子了,改成 EGF 的形式:
B(x)+x=B(x)exp(x)
然后显然就有
B(n)=xexp(x)−1
于是可以一次求逆做到 O(nlogn) 求一行 求前 n 项 .
自然数幂和
(题目链接:CF622F)
求
Sk(n)=n∑i=0ik
做法
插值
差分一次变成 nk,显然是 k 次的 .
然而众所周知差分一次次数减一,于是 Sk 是 k+1 次的 .
暴力算出前 k 个点值然后插值即可,复杂度取决于你怎么插值 .
upd. O(1) 固定指数快速幂大家是不是都会啊,前面说的是求系数的复杂度,如果求单点当然是插值最快 .
How to solve it?
显然 f(n)=nk 是完全积性函数 .
素数处暴力算,别的地方线性筛即可,代码特别好写 .
预处理 O(n),询问 O(1) .
系数咋求:
- 快速插值 O(nlog2n) .
- 下降幂多项式形式(斯特林数相关)O(nlogn) .
- 普通多项式形式(伯努利数相关)O(nlogn) .
下面说后面两个 .
第二类斯特林数
普通幂转下降幂:
nk=k∑i=0{ki}ni–
证明:考虑组合意义即可,LHS 是子集数,RHS 相当于枚举非空子集数然后算贡献 .
根据小学生就会的裂项,我们可以算出下降幂和:
Sk––(n)=k∑i=0ni–=1k+1n∑i=0((i+1)k+1–––––−ik+1–––––)=1k+1(n+1)k+1–––––
然后把两个式子结合到一起,就变成
Sk(n)=k∑i=01i+1{ki}(n+1)k+1–––––
第二类斯特林数求一行可以 O(nlogn) .
这个方法如果 n 是合数,那么下降幂和 1i+1 显然可以约分(根据抽屉原理),然后就不需要任何逆元操作了 .
伯努利数
!!!!!! 如果你不知道 EGF 是啥,有一个 归纳做法 .
一篇奥妙重重的博客 link,看起来很牛逼,然而我并不懂 .
以下可能比较清晰 .
为了后面写着方便,把 n 自减,即定义 S′k(n)=n−1∑i=0ik .
众所周知伯努利数的 EGF 为
B(n)=xexp(x)−1
然后我们拿出 S′k 的 EGF:
∑k≥0xkk!S′k(n)=∑k≥0xkk!n−1∑i=1ik=n−1∑i=1∑k≥0ikxkk!=n−1∑i=1exp(xi)=exp(nx)−1exp(x)−1
然后发现这个 EGF 和伯努利数 EGF 挺像,于是改一下形式:
exp(nx)−1exp(x)−1=xexp(x−1)⋅exp(nx)−1x
然后我们就可以拆成一个伯努利数 EGF 乘一个指数的 EGF .
提取系数:
[xkk!]∑k≥0xkk!S′k(n)=[xkk!]((∑k≥0xkk!Bk)(∑k≥0xkk!nk+1))=k!k∑i=0Bii!⋅nk+1−i(k+1−i)!=1k+1k∑i=0(k+1i)Bink+1−i=1k+1k+1∑i=1(k+1i)Bk+1−ini
即
S′k(n)=1k+1k+1∑i=1(k+1i)Bk+1−ini
如果转成一般用的 Sk,柿子的形式可以看 here .
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义