自然数幂和

Posted Jijidawang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自然数幂和相关的知识,希望对你有一定的参考价值。

123

听说一个人的数论要用伯努利数处理自然数幂和,然而我之前只会插值,吓得跑去学了一下自然数幂和 .

附录 — 前置知识

插值相关:看我的博客 link(旧文慎入) .


第二类斯特林数相关:

定义:第二类斯特林数 \\(\\displaystylen\\brace k\\) 表示 \\(n\\) 个有标号小球放入 \\(k\\) 个无标号集合,每个集合都非空的方案数 .

然后根据组合意义(这个证明和二项式系数那个差不多),可以得到递推式:

\\[\\boxedn\\brace k=kn-1\\brace k+n-1\\brace k-1 \\]

然后这个可以 \\(O(n^2)\\) 递推 .

然后前面是不是说了

\\[\\boxedn^k=\\sum_i=0^kk\\brace in^\\underline i \\]

套二项式反演(你也可以看成套了一个容斥),然后变成

\\[n\\brace m=\\dfrac1m!\\sum_i=0^m(-1)^i\\dbinom mi(m-i)^n \\]

是不是卷积的形式 .

于是可以 \\(O(n\\log n)\\) 卷积求一行 .


伯努利数相关:

伯努利数 \\(\\B\\\\) 是如下定义的有理数序列:

\\[\\sum_i=0^n\\dbinomn+1iB_i=0 \\]

其中 \\(B_0=1\\) .

然后可以根据定义 \\(O(n^2)\\) 求 .

我们考虑整出它的 EGF .

显然式子是不是可以改成

\\[\\sum_i=0^n\\dbinomn+1iB_i=[n=0] \\]

做一些平凡的操作:

\\[\\beginaligned&\\sum_i=0^n\\dbinomn+1iB_i=[n=0]\\\\\\Longleftrightarrow&\\sum_i=0^n+1\\dbinomn+1i=B_n+1+[n=0]\\\\\\Longleftrightarrow&\\sum_i=0^n\\dbinom ni=B_n+[n=1]\\\\\\Longleftrightarrow&\\dfracB_nn!+[n=1]=\\sum_i=0^n\\dfrac1(n-i)!\\cdot\\dfracB_ii!\\endaligned \\]

这就有点 EGF 的样子了,改成 EGF 的形式:

\\[\\operatorname B(x)+x=\\operatorname B(x)\\exp(x) \\]

然后显然就有

\\[\\boxed\\operatorname B(n)=\\dfracx\\exp(x)-1 \\]

于是可以一次求逆做到 \\(O(n\\log n)\\) 求一行 求前 \\(n\\) 项 .


自然数幂和

(题目链接:CF622F

\\[S_k(n)=\\sum_i=0^ni^k \\]

做法

插值

差分一次变成 \\(n^k\\),显然是 \\(k\\) 次的 .

然而众所周知差分一次次数减一,于是 \\(S_k\\)\\(k+1\\) 次的 .

暴力算出前 \\(k\\) 个点值然后插值即可,复杂度取决于你怎么插值 .

系数咋求:

  1. 快速插值 \\(O(n\\log^2n)\\) .
  2. 下降幂多项式形式(斯特林数相关)\\(O(n\\log n)\\) .
  3. 普通多项式形式(伯努利数相关)\\(O(n\\log n)\\) .

下面说后面两个 .

第二类斯特林数

普通幂转下降幂:

\\[\\boxedn^k=\\sum_i=0^kk\\brace in^\\underline i \\]

证明:考虑组合意义即可,LHS 是子集数,RHS 相当于枚举非空子集数然后算贡献 .

根据小学生就会的裂项,我们可以算出下降幂和:

\\[\\beginalignedS_\\underline k(n)&=\\sum_i=0^kn^\\underline i\\\\&=\\dfrac1k+1\\sum_i=0^n((i+1)^\\underlinek+1-i^\\underlinek+1)\\\\&=\\dfrac1k+1(n+1)^\\underlinek+1\\endaligned \\]

然后把两个式子结合到一起,就变成

\\[\\boxedS_k(n)=\\sum_i=0^k\\dfrac1i+1k\\brace i(n+1)^\\underlinek+1 \\]

第二类斯特林数求一行可以 \\(O(n\\log n)\\) .

这个方法如果 \\(n\\) 是合数,那么下降幂和 \\(\\dfrac1i+1\\) 显然可以约分(根据抽屉原理),然后就不需要任何逆元操作了 .

伯努利数

一篇奥妙重重的博客 link,看起来很牛逼,然而我并不懂 .

以下可能比较清晰 .


为了后面写着方便,把 \\(n\\) 自减,即定义 \\(\\displaystyle S\'_k(n)=\\sum_i=0^n-1i^k\\) .

众所周知伯努利数的 EGF 为

\\[\\operatorname B(n)=\\dfracx\\exp(x)-1 \\]

然后我们拿出 \\(S\'_k\\) 的 EGF:

\\[\\beginaligned\\sum_k\\ge 0\\dfracx^kk!S\'_k(n)&=\\sum_k\\ge 0\\dfracx^kk!\\sum_i=1^n-1i^k\\\\&=\\sum_i=1^n-1\\sum_k\\ge 0\\dfraci^kx^kk!\\\\&=\\sum_i=1^n-1\\exp(xi)\\\\&=\\dfrac\\exp(nx)-1\\exp(x)-1\\endaligned \\]

然后发现这个 EGF 和伯努利数 EGF 挺像,于是改一下形式:

\\[\\dfrac\\exp(nx)-1\\exp(x)-1=\\dfracx\\exp(x-1)\\cdot\\dfrac\\exp(nx)-1x \\]

然后我们就可以拆成一个伯努利数 EGF 乘一个指数的 EGF .

提取系数:

\\[\\beginaligned\\left[\\dfracx^kk!\\right]\\sum_k\\ge 0\\dfracx^kk!S\'_k(n)&=\\left[\\dfracx^kk!\\right]\\left(\\left(\\sum_k\\ge 0\\dfracx^kk!B_k\\right)\\left(\\sum_k\\ge 0\\dfracx^kk!n^k+1\\right)\\right)\\\\&=k!\\sum_i=0^k\\dfracB_ii!\\cdot\\dfracn^k+1-i(k+1-i)!\\\\&=\\dfrac1k+1\\sum_i=0^k\\dbinomk+1iB_in^k+1-i\\\\&=\\dfrac1k+1\\sum_i=1^k+1\\dbinomk+1iB_k+1-in^i\\endaligned \\]

\\[\\boxedS\'_k(n)=\\dfrac1k+1\\sum_i=1^k+1\\dbinomk+1iB_k+1-in^i \\]

如果转成一般用的 \\(S_k\\),柿子的形式可以看 here .

以上是关于自然数幂和的主要内容,如果未能解决你的问题,请参考以下文章

求自然数幂和

各类求自然数幂和方法

Stirling数反演与自然数幂和

康复计划#3 简单常用的几种计算自然数幂和的方法

自然数幂和[第二类斯特林数求法]

51nod1228 序列求和(自然数幂和)