自然数幂和多项式

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

附录 — 前置知识

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


第二类斯特林数相关:

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

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

\[\boxed{{n\brace k}=k{n-1\brace k}+{n-1\brace k-1}} \]

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

普通幂转下降幂(后面会说)

\[\boxed{n^k=\sum_{i=0}^k{k\brace i}n^{\underline i}} \]

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

\[{n\brace m}=\dfrac1{m!}\sum_{i=0}^m(-1)^i\dbinom mi(m-i)^n \]

是不是卷积的形式 .

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


伯努利数相关:

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

\[\sum_{i=0}^n\dbinom{n+1}iB_i=0 \]

其中 \(B_0=1\) .

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

我们考虑整出它的 EGF .

显然式子是不是可以改成

\[\sum_{i=0}^n\dbinom{n+1}iB_i=[n=0] \]

做一些平凡的操作:

\[\begin{aligned}&\sum_{i=0}^n\dbinom{n+1}iB_i=[n=0]\\\Longleftrightarrow&\sum_{i=0}^{n+1}\dbinom{n+1}i=B_{n+1}+[n=0]\\\Longleftrightarrow&\sum_{i=0}^{n}\dbinom ni=B_{n}+[n=1]\\\Longleftrightarrow&\dfrac{B_n}{n!}+[n=1]=\sum_{i=0}^n\dfrac1{(n-i)!}\cdot\dfrac{B_i}{i!}\end{aligned} \]

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

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

然后显然就有

\[\boxed{\operatorname B(n)=\dfrac{x}{\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\) 个点值然后插值即可,复杂度取决于你怎么插值 .

upd. \(O(1)\) 固定指数快速幂大家是不是都会啊,前面说的是求系数的复杂度,如果求单点当然是插值最快 .

How to solve it?

显然 \(f(n)=n^k\) 是完全积性函数 .

素数处暴力算,别的地方线性筛即可,代码特别好写 .

预处理 \(O(n)\),询问 \(O(1)\) .

系数咋求:

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

下面说后面两个 .

第二类斯特林数

普通幂转下降幂:

\[\boxed{n^k=\sum_{i=0}^k{k\brace i}n^{\underline i}} \]

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

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

\[\begin{aligned}S_{\underline k}(n)&=\sum_{i=0}^kn^{\underline i}\\&=\dfrac1{k+1}\sum_{i=0}^n((i+1)^{\underline{k+1}}-i^{\underline{k+1}})\\&=\dfrac1{k+1}(n+1)^{\underline{k+1}}\end{aligned} \]

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

\[\boxed{S_k(n)=\sum_{i=0}^k\dfrac1{i+1}{k\brace i}(n+1)^{\underline{k+1}}} \]

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

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

伯努利数

!!!!!! 如果你不知道 EGF 是啥,有一个 归纳做法 .

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

以下可能比较清晰 .


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

众所周知伯努利数的 EGF 为

\[\operatorname B(n)=\dfrac{x}{\exp(x)-1} \]

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

\[\begin{aligned}\sum_{k\ge 0}\dfrac{x^k}{k!}S'_k(n)&=\sum_{k\ge 0}\dfrac{x^k}{k!}\sum_{i=1}^{n-1}i^k\\&=\sum_{i=1}^{n-1}\sum_{k\ge 0}\dfrac{i^kx^k}{k!}\\&=\sum_{i=1}^{n-1}\exp(xi)\\&=\dfrac{\exp(nx)-1}{\exp(x)-1}\end{aligned} \]

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

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

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

提取系数:

\[\begin{aligned}\left[\dfrac{x^k}{k!}\right]\sum_{k\ge 0}\dfrac{x^k}{k!}S'_k(n)&=\left[\dfrac{x^k}{k!}\right]\left(\left(\sum_{k\ge 0}\dfrac{x^k}{k!}B_k\right)\left(\sum_{k\ge 0}\dfrac{x^k}{k!}n^{k+1}\right)\right)\\&=k!\sum_{i=0}^k\dfrac{B_i}{i!}\cdot\dfrac{n^{k+1-i}}{(k+1-i)!}\\&=\dfrac1{k+1}\sum_{i=0}^k\dbinom{k+1}iB_in^{k+1-i}\\&=\dfrac1{k+1}\sum_{i=1}^{k+1}\dbinom{k+1}{i}B_{k+1-i}n^i\end{aligned} \]

\[\boxed{S'_k(n)=\dfrac1{k+1}\sum_{i=1}^{k+1}\dbinom{k+1}{i}B_{k+1-i}n^i} \]

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

posted @ 2022-03-31 09:51  Jijidawang  阅读(131)  评论(0编辑  收藏  举报
😅​