【题解】P5907 数列求和加强版 / P4948 数列求和

本题解是对 warzone 的题解的补充。

题意:求

\[\sum_{i=1}^n i^k a^i \]

  • 普通版:\(k\leq 2\times 10^3\)

  • 加强版:\(k\leq 10^7\)

首先先考虑普通版

\[\begin{aligned} \sum_{i=1}^n i^k a^i&=\sum_{i=1}^na^i\sum_{j=0}^k {k\brace j}i^{\underline{j}} \\ &=\sum_{j=0}^{k} {k\brace j}\sum_{i=1}^n a^ii^{\underline{j}} \\ &=\sum_{j=0}^{k} {k\brace j}{\sum}_1^{n+1}a^xx^{\underline{j}}\delta x \end{aligned} \]

进行分类讨论。

  • \(a=1\)

\[\begin{aligned} &=\sum_{j=0}^{k} {k\brace j}{\sum}_1^{n+1}x^{\underline{j}}\delta x \\ &=\sum_{j=0}^k {k\brace j}\frac{(n+1)^{\underline{j}}-1^{\underline{j}}}{j+1} \end{aligned} \]

预处理 Stirling 数 \(\Theta(k^2)\)\(\Theta(k\log k)\),递推计算是 \(\Theta(k)\) 的。

  • \(a\neq 1\)

我们有

\[\Delta uv=u\Delta v+\mathbf{E}v\Delta u \]

两边同时求和,得

\[uv=\sum u\Delta v\delta x+\sum\mathbf{E}v\Delta u\delta x \]

\[\sum u\Delta v\delta x=uv-\sum\mathbf{E}v\Delta u\delta x \]

考虑求出 \(a^xx^{\underline{j}}\) 的“原和式”(不定和式)。我们不妨令 \(u=a^x\)\(\Delta v=x^{\underline{j}}\)(则 \(v=\dfrac{x^{\underline{j+1}}}{j+1}\)

于是 \(\sum a^xx^j\delta x=\dfrac{a^xx^{\underline{j+1}}}{j+1}-\sum (x+1)^{\underline{j}}(a-1)a^x\delta x\)

好像不可做。如果令 \(u=x^{\underline{j}}\)\(\Delta v=a^x\)(则 \(v=\dfrac{a^x}{a-1}\))呢?

代入得到

\(\sum a^xx^j\delta x=\dfrac{a^xx^{\underline{j}}}{a-1}-\sum \dfrac{a^{x+1}}{a-1}jx^{\underline{j-1}}\delta x\)

也就是说

\[{\sum}_0^{n+1} a^xx^j=\frac{a^xx^j}{a-1}\bigg|_{0}^{n+1}-\frac{j\cdot a}{a-1}{\sum}_0^{n+1} a^xx^{\underline{j-1}}\delta x \]

边界为 \(j=0\) 时,\(\sum a^xx^j\delta x=\sum a^x\delta x=\dfrac{a^x}{a-1}\)

预处理 \(\Theta(k^2)\)\(\Theta(k\log k)\),递推计算是 \(\Theta(k)\) 的。

综上,我们在 \(\Theta(k^2)\)\(\Theta(k\log k)\) 的复杂度内解决了普通版。


那么我们考虑加强版。

考虑 \(a=1\),其实就是 CF622F。但是本题中 \(k\leq 10^7\),直接计算每一个数的 \(k\) 次幂可能会寄。

但是我们知道,\(n\) 个数中有 \(\Theta(\dfrac{n}{\ln n})\) 个素数。考虑到 \(\operatorname{Id}^k\) 是一个完全积性函数,于是我们只在素数处计算其 \(k\) 次幂,然后在线性筛时顺便推出其他数的幂即可,这样时间复杂度是 \(\Theta(\dfrac{k\log k}{\ln k})=\Theta(k)\) 的。

以下默认 \(a\neq 1\)

\(\displaystyle f(n)={\sum}_0^n x^ka^x\delta x\),答案即为 \(f(n+1)-f(1)\)

注意到在普通版中我们有

\[\begin{aligned} \sum a^xx^k\delta x&=\dfrac{\textcolor{red}{a^x}x^{\underline{k}}}{a-1}-\frac{a\cdot k}{a-1}\textcolor{red}{a^{x}}\sum x^{\underline{k-1}}\delta x \\ &=a^x\left(\frac{x^{\underline{k}}}{a-1}-\frac{a\cdot k}{a-1}\sum x^{\underline{k-1}}\right) \end{aligned} \]

\(a^x\) 右边的那一包东西显然是一个 \(k\) 次多项式,不妨设为 \(g(x)\)。则我们有

\[{\sum}_l^r a^xx^k\delta x=a^rg(r)-a^lg(l) \]

\[f(n)=a^ng(n)-a^0g(0) \]

如果我们能知道 \(g(0),g(1),\cdots,g(n)\) 的点值,就不难应用 Lagrange 插值法在 \(\Theta(k)\) 内求出 \(g(n+1)\)。那么问题转化为如何求 \(g(0),g(1),\cdots,g(n)\)

我们考虑到

\[f(n)=a^ng(n)-a^0g(0) \]

\[g(n)=\frac{f(n)+g(0)}{a^{n}} \]

\(f(0),f(1),\cdots,f(k)\) 可以 \(\Theta(k)\) 递推。那么现在的当务之急就是求出 \(g(0)\) 了。

我们知道 \(\deg g=k\),这意味着 \(\Delta^{k+1} g=0\)

于是

\[\sum_{i=0}^{k+1}{k+1\choose i}(-1)^{k+1-i}\mathbf{E}^{i}g(0)=0 \]

\[\sum_{i=0}^{k+1}{k+1\choose i}(-1)^{k+1-i}g(i)=0 \]

\[\sum_{i=0}^{k+1}{k+1\choose i}(-1)^{k+1-i}a^{-i}[f(i)+g(0)]=0 \]

\[\sum_{i=0}^{k+1}{k+1\choose i}(-1)^{k+1-i}a^{-i}f(i)+\sum_{i=0}^{k+1}{k+1\choose i}(-1)^{k+1-i}a^{-i}g(0)=0 \]

\[\sum_{i=0}^{k+1}{k+1\choose i}(-1)^{k+1-i}a^{-i}f(i)+(a^{-1}-1)^{k+1}g(0)=0 \]

\[g(0)=-(a^{-1}-1)^{-(k+1)}\sum_{i=0}^{k+1}{k+1\choose i}(-1)^{k+1-i}a^{-i}f(i) \]

不难 \(\Theta(k)\) 求出。综上我们在 \(\Theta(k)\) 的时间复杂度内解决了本题。

答案即为 \(a^{n+1}g(n+1)-a\cdot g(1)\)

顺便讲一下如何 \(\Theta(k)\) 插值。

注意到我们只需要算 \(g(n+1)\)

我们有

\[g(n+1)=\sum_{i=0}^{k}g(i)\frac{\prod_{j\neq i}(n+1-j)}{\prod_{j\neq i}(i-j)}\]

分母就是

\[i(i-1)\cdots 2\cdot 1\cdot (-1)\cdot (-2)\cdots (i-k) \]

即为

\[(-1)^{k-i}i!(k-i)! \]

分子就是

\[\frac{(n+1-0)(n+1-1)\cdots(n+1-k)}{n+1-i} \]

所以分式即为

\[(-1)^{k-i}\frac{(n+1-0)(n+1-1)\cdots(n+1-k)}{(n+1-i)i!(k-i)!} \]

可以前后缀预处理做到严格 \(\Theta(k)\)

posted @ 2024-02-06 15:56  Starrykiller  阅读(47)  评论(0)    收藏  举报