序列幂次求和的快速计算

对于给定序列 \(\{a_1, a_2, a_3, \cdots, a_n\}\) ,要求计算 \(\displaystyle s(n, k)=\sum_{i=1}^n a_i^k\)


【分析】

考虑 \(s_n[k]\) 的 EGF :

\(\begin{aligned} \hat S_n(x)&=\sum_{t=0}^\infty s(n, t)\cdot {x^t\over t!} \\\\&=\sum_{t=0}^\infty \sum_{i=1}^n a_i^t \cdot {x^t\over t!} \\\\&=\sum_{i=1}^n \sum_{t=0}^\infty {(a_ix)^t\over t!} \\\\&=\sum_{i=1}^n e^{a_ix} \end{aligned}\)

从而解得 \(\displaystyle s_n[k]=k!\cdot \hat S_n[k]=k!\cdot \sum_{i=1}^n e^{a_ix}[k]\)


【应用】

自然数幂次求和:

\(\displaystyle \hat S_n(x)=\sum_{i=1}^n e^{ix}={e^{(n+1)x}-1\over e^x-1}={\displaystyle ({e^{(n+1)x}-1\over x})\over \displaystyle ({e^x-1\over x})}={P(x)\over Q(x)}\)

下面的 \(Q(x)\) 求逆后化为 \(R(x)\) ,再与上面的 \(P(x)\) 乘积即为 \(\hat S_n(x)\)

而若只是求解 \(\hat S_n[k]\) 则可先预处理 \(R(x)\) ,而后通过 \(\displaystyle \hat S_n[k]=\sum_{i+j=k}P[i]R[j]\)\(O(k)\) 求解

posted @ 2021-11-03 20:45  JustinRochester  阅读(155)  评论(0编辑  收藏  举报