码迷,mamicode.com
首页 > 其他好文 > 详细

自然数幂和

时间:2020-08-28 14:30:56      阅读:40      评论:0      收藏:0      [点我收藏+]

标签:mat   sla   分治   拉格朗日插值   数列   自然数   直接   复杂   amp   

扰动法

应用两次扰动法。

\[\large\begin{aligned} S_k(n)&=\sum_{i=0}^ni^k &=\sum_{i=0}^n(i+1)^k-(n+1)^k &=\sum_{i=0}^n\sum_{j=0}^k\binom{k}{j}i^j-(n+1)^k &=\sum_{j=0}^k\binom{k}{j}S_j(n)-(n+1)^k &=\sum_{j=0}^{k-2}\binom{k}{j}S_j(n)+kS_{k-1}(n)+S_k(n)-(n+1)^k \end{aligned} \]

得:

\[\large\begin{aligned} S_{k-1}(n)&=\frac{(n+1)^k-\sum\limits_{j=0}^{k-2}\binom{k}{j}S_j(n)}{k} S_k(n)&=\frac{(n+1)^{k+1}-\sum\limits_{j=0}^{k-1}\binom{k+1}{j}S_j(n)}{k+1} \end{aligned} \]

直接计算可以做到 \(O(k^2)\)。分治 \(FFT\) 可以做到 \(O(k \log^2 k)\)

拉格朗日插值法

由扰动法推得的式子,发现 \(S_k(n)\)\(k+1\) 次多项式,对于 \(i^k\) 可以进行线性筛,每个素数暴力快速幂,因为小于等于 \(n\) 的素数个数约为 \(\frac{n}{\ln n}\),得复杂度为 \(O(\frac{k}{\ln k}\log k)=O(k)\)

第一类斯特林数

\[\large x^{\overline{n}}=\sum_{i=0}^n\begin{bmatrix}n\\ i\end{bmatrix}x^i \]

通过组合意义即可证明,其也可以用归纳法证明:

已知:

\[\large x^{\overline{n-1}}=\sum_{i=0}^{n-1}\begin{bmatrix}n-1\\ i\end{bmatrix}x^i \]

得:

\[\large\begin{aligned} x^{\overline{n-1}}&=\sum_{i=0}^{n-1}\begin{bmatrix}n-1\\ i\end{bmatrix}x^i (x+n-1)x^{\overline{n-1}}&=(x+n-1)\sum_{i=0}^{n-1}\begin{bmatrix}n-1\\ i\end{bmatrix}x^i x^{\overline{n}}&=(n-1)\sum_{i=0}^{n-1}\begin{bmatrix}n-1\\ i\end{bmatrix}x^i+\sum_{i=1}^{n}\begin{bmatrix}n-1\\ i-1\end{bmatrix}x^i x^{\overline{n}}&=\sum_{i=0}^{n}\begin{bmatrix}n\\ i\end{bmatrix}x^i \\end{aligned} \]

代入得:

\[\large\begin{aligned} S_k(n)&=\sum_{i=0}^ni^k &=\sum_{i=0}^n(i^{\overline{k}}-\sum_{j=0}^{k-1}\begin{bmatrix}k\\ j\end{bmatrix}i^j) &=\sum_{i=0}^ni^{\overline{k}}-\sum_{i=0}^n\sum_{j=0}^{k-1}\begin{bmatrix}k\\ j\end{bmatrix}i^j &=\sum_{i=0}^n\binom{i+k-1}{k}k!-\sum_{j=0}^{k-1}\begin{bmatrix}k\\ j\end{bmatrix}S_j(n) &=\binom{n+k}{k+1}k!-\sum_{j=0}^{k-1}\begin{bmatrix}k\\ j\end{bmatrix}S_j(n) &=\frac{(n+k)!}{(n-1)!(k+1)!}k!-\sum_{j=0}^{k-1}\begin{bmatrix}k\\ j\end{bmatrix}S_j(n) &=\frac{n^{\overline{k+1}}}{k+1}-\sum_{j=0}^{k-1}\begin{bmatrix}k\\ j\end{bmatrix}S_j(n) \\end{aligned} \]

直接计算可以做到 \(O(k^2)\)。不用保证模数存在逆元,\(k+1\) 一定是 \(n^{\overline{k+1}}\) 的约数。

用归纳法可得:

\[\large x^{\overline{n}} = (-1)^n(-x)^{\underline{n}} \large x^{\underline{n}} = (-1)^n(-x)^{\overline{n}} \\]

代入 \(x^{\overline{n}}=\sum\limits_{i=0}^n\begin{bmatrix}n\\ i\end{bmatrix}x^i\) 得:

\[\large x^{\underline{n}}=\sum\limits_{i=0}^n(-1)^{n-i}\begin{bmatrix}n\\ i\end{bmatrix}x^i \]

应用这个式子也可以进行求解:

\[\large\begin{aligned} S_k(n)&=\sum_{i=0}^ni^k &=\sum_{i=0}^n(i^{\underline{k}}-\sum_{j=0}^{k-1}(-1)^{k-j}\begin{bmatrix}k\\ j\end{bmatrix}i^j) &=\sum_{i=0}^ni^{\underline{k}}-\sum_{i=0}^n\sum_{j=0}^{k-1}(-1)^{k-j}\begin{bmatrix}k\\ j\end{bmatrix}i^j &=\sum_{i=0}^n\binom{i}{k}k!-\sum_{j=0}^{k-1}(-1)^{k-j}\begin{bmatrix}k\\ j\end{bmatrix}S_j(n) &=\binom{n+1}{k+1}k!-\sum_{j=0}^{k-1}(-1)^{k-j}\begin{bmatrix}k\\ j\end{bmatrix}S_j(n) &=\frac{(n+1)^{\underline{k+1}}}{k+1}-\sum_{j=0}^{k-1}(-1)^{k-j}\begin{bmatrix}k\\ j\end{bmatrix}S_j(n) \end{aligned} \]

直接计算可以做到 \(O(k^2)\)。不用保证模数存在逆元,\(k+1\) 一定是 \((n+1)^{\underline{k+1}}\) 的约数。

第二类斯特林数

\[\large x^n = \sum_{i=0}^n \begin{Bmatrix} n \\i \end{Bmatrix} x^{\underline{i}} \]

通过组合意义即可证明,其也可以用归纳法证明:

已知:

\[\large x^{n-1} = \sum_{i=0}^{n-1} \begin{Bmatrix} n-1 \\i \end{Bmatrix} x^{\underline{i}} \]

得:

\[\large\begin{aligned} \large x^{n-1} &= \sum_{i=0}^{n-1} \begin{Bmatrix} n-1 \\i \end{Bmatrix} x^{\underline{i}} \large x^n &= x\sum_{i=0}^{n-1} \begin{Bmatrix} n-1 \\i \end{Bmatrix} x^{\underline{i}} \large x^n &= \sum_{i=0}^{n-1} \begin{Bmatrix} n-1 \\i \end{Bmatrix} ix^{\underline{i}} +\sum_{i=0}^{n-1} \begin{Bmatrix} n-1 \\i \end{Bmatrix} (x-i)x^{\underline{i}} \large x^n &= \sum_{i=0}^{n-1} \begin{Bmatrix} n-1 \\i \end{Bmatrix} ix^{\underline{i}} +\sum_{i=1}^n \begin{Bmatrix} n-1 \\i-1 \end{Bmatrix} x^{\underline{i}} \large x^n &= \sum_{i=0}^n \begin{Bmatrix} n \\i \end{Bmatrix} x^{\underline{i}} \\end{aligned} \]

代入得:

\[\large\begin{aligned} S_k(n)&=\sum_{i=0}^ni^k &=\sum_{i=0}^n\sum_{j=0}^k\begin{Bmatrix} k \\j \end{Bmatrix} i^{\underline{j}} &=\sum_{j=0}^k\begin{Bmatrix} k \\j \end{Bmatrix}\sum_{i=0}^n i^{\underline{j}} &=\sum_{j=0}^k\begin{Bmatrix} k \\j \end{Bmatrix}\sum_{i=0}^n \binom{i}{j}j! &=\sum_{j=0}^k\begin{Bmatrix} k \\j \end{Bmatrix} \binom{n+1}{j+1}j! &=\sum_{j=0}^k\begin{Bmatrix} k \\j \end{Bmatrix} \frac{(n+1)^{\underline{j+1}}}{j+1} \\end{aligned} \]

直接计算可以做到 \(O(k^2)\)。不用保证模数存在逆元,\(j+1\) 一定是 \((n+1)^{\underline{j+1}}\) 的约数。可以通过卷积 \(O(n \log n)\) 求出第二类斯特林数一行后快速求解。

伯努利数

伯努利数前几项为 \(1,-\frac{1}{2},\frac{1}{6},0,-\frac{1}{30}\),其为非整数数列,其定义为:

\[\large \sum_{i=0}^{n}\binom{n+1}{i}B_i=[n=0] \]

可以进行 \(O(n^2)\) 递推。还可以通过生成函数快速求伯努利数,得:

\[\large\begin{aligned} \sum_{i=0}^{n}\binom{n+1}{i}B_i&=[n=0] \sum_{i=0}^{n+1}\binom{n+1}{i}B_i&=B_{n+1}+[n=0] \sum_{i=0}^{n}\binom{n}{i}B_i&=B_{n}+[n=1] \end{aligned} \]

发现左边为伯努利数的指数生成函数和指数生成函数 \(e^x\) 的卷积,得:

\[\large\begin{aligned} B(x)e^x &= B(x) + x B(x) &= \frac{x}{e^x-1} \end{aligned} \]

可以多项式求逆实现 \(O(n \log n)\) 求伯努利数。

这里设 \(S_k(n)=\sum\limits_{i=0}^{n-1}i^k\),伯努利数为自然数幂和对应的多项式的系数:

\[\large S_k(n)=\frac{1}{k+1}\sum_{i=0}^k\binom{k+1}{i}B_in^{k+1-i} \]

考虑证明,设 \(F(x)\)\(S_k(n)\) 的生成函数,得:

\[\large\begin{aligned} F(x) &= \sum_{i \geqslant 0} \frac{S_i(n)}{i!}x^i &= \sum_{i \geqslant 0}\sum_{j=0}^{n-1} j^i \frac{x^i}{i!} &= \sum_{j=0}^{n-1}\sum_{i \geqslant 0} \frac{(jx)^i}{i!} &= \sum_{j=0}^{n-1}e^{jx} &= \frac{e^{nx}-1}{e^x-1} &= B(x)\frac{e^{nx}-1}{x} &= B(x)\frac{\sum\limits_{i \geqslant 1} \frac{(nx)^i}{i!}}{x} &= B(x) \sum_{i \geqslant 0} \frac{n^{i+1}x^i}{(i+1)!}\end{aligned} \]

因为 \(\left [x^k\right ]F(x)=\frac{S_k(n)}{k!}\),得:

\[\large\begin{aligned} S_k(n) &= k!\sum_{i = 0}^k \frac{B_in^{k+1-i}}{i!(k+1-i)!} S_k(n) &= \frac{1}{k+1}\sum_{i=0}^k\binom{k+1}{i}B_in^{k+1-i} \end{aligned} \]

自然数幂和

标签:mat   sla   分治   拉格朗日插值   数列   自然数   直接   复杂   amp   

原文地址:https://www.cnblogs.com/lhm-/p/13550060.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!