载谭 Binomial Sum 学习笔记
原文链接:载谭 Binomial Sum:多项式复合、插值与泰勒展开。
下面就从例题开始慢慢说这个算法。
P5430 [SNOI2017] 礼物 加强版
题目描述
给定 \(n, k\),求
\[n^k+\sum_{i=1}^{n-1} 2^{n-1-i}i^k
\]
答案对 \(10^9+7\) 取模。
\(1 \le n \le 10^{100000}, 1 \le k \le 2\times 10^7\)。
题解
不妨将形式化得好看一些,只需要求
\[\sum_{i=0}^n a^ii^k
\]
其中满足 \(a \ne 1\)。
写成生成函数的形式:
\[\left[\frac{x^k}{k!}\right]\sum_{i=0}^{n} {(ae^x)}^i
\]
令 \(\displaystyle F(x)=\sum_{i=0}^n x^i=\frac{1-x^{n+1}}{1-x}\),所求即 \(\displaystyle\left[\frac{x^k}{k!}\right]F(ae^x)\)。
\[\left[\frac{x^k}{k!}\right]F(x)\circ(ae^x)=\left[\frac{x^k}{k!}\right]F(x+a)\circ(ae^x-a)
\]
令 \(\mathscr{F}(x+a)=F(x+a)\bmod x^{k+1}\),则
\[\left[\frac{x^k}{k!}\right]F(x+a)\circ (ae^x-a)=\left[\frac{x^k}{k!}\right]\mathscr{F}(x+a)\circ (ae^x-a)=\left[\frac{x^k}{k!}\right]\mathscr{F}(x)\circ (ae^x)
\]
\[F(x)=\frac{1-x^{n+1}}{1-x}
\]
\[F(x)\cdot(1-x)=1-x^{n+1}
\]
两边同时求导,得
\[F'(x)\cdot(1-x)-F(x)=-(n+1)x^n
\]
\[F'(x)\cdot(x-1)+F(x)=(n+1)x^n
\]
两边同时复合 \(x+a\),得
\[F'(x+a)\cdot(x+a-1)+F(x+a)=(n+1){(x+a)}^n
\]
考虑将 \(F(x+a)\) 替换成 \(\mathscr{F}(x+a)\) 会产生什么影响。
\[\mathscr{F}'(x+a)\cdot(x+a-1)+\mathscr{F}(x+a)=(n+1)[{(x+a)}^n\bmod{x^{k+1}}]-(a-1)x^k[x^k]F'(x+a)
\]
\[x^k[x^k]F'(x+a)=(k+1)x^k[x^{k+1}]F(x+a)=(k+1)x^k[x^{k+1}]\frac{1-{(x+a)}^{n+1}}{1-x-a}
\]