序列幂次求和的快速计算
对于给定序列 \(\{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)\) 求解