序列幂次求和的快速计算

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


【分析】

考虑 (s_n[k]) 的 EGF :

(egin{aligned} hat S_n(x)&=sum_{t=0}^infty s(n, t)cdot {x^tover t!} \\&=sum_{t=0}^infty sum_{i=1}^n a_i^t cdot {x^tover t!} \\&=sum_{i=1}^n sum_{t=0}^infty {(a_ix)^tover 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}-1over e^x-1}={displaystyle ({e^{(n+1)x}-1over x})over displaystyle ({e^x-1over 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)) 求解

原文地址:https://www.cnblogs.com/JustinRochester/p/15505644.html