原文連結:載譚 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)-F'(x)\cdot(1-x)=(n+1)x^n
\]
兩邊同時複合 \(x+a\),可得
\[F(x+a)-F'(x+a)\cdot(1-a-x)=(n+1){(x+a)}^n
\]
考慮將 \(F(x+a)\) 替換成 \(\mathscr{F}(x+a)\) 會產生什麼影響。
\[\mathscr{F}(x+a)-\mathscr{F}'(x+a)\cdot(1-a-x)=[(n+1){(x+a)}^n \bmod{x^{k+1}}]+[x^k]F'(x+a)\cdot(1-a-x)
\]