载谭 Binomial Sums 学习笔记

· · 算法·理论

载谭 Binomial Sums 学习笔记

小 F 发誓 NOIP 不退役就一定学懂的东西,今天填坑。

求的是什么?

对于 D-Finite 的 GF F(x) 和另一个普通 GF G(x) 如果对 k\in [0,n] 知道 b_k=\sum\limits_{j=0}^{n}a_j[x^j]G(x)^k,就能在 O(n) 时间算 \sum\limits_{j=0}^{n}a_j[x^j]F(G(x))

具体地,求出 \mathbb{F}(x),\mathbb{F}(x+c)=F(x+c)\bmod x^{n+1}f_i=[x^n]\mathbb{F}(x),则 ans=\sum\limits_{i\geq 0}f_ib_i

感觉比较抽象

简单证明:

\begin{aligned} F(G(x))&=\sum\limits_{i\geq 0} \frac{F^{(i)}(c)}{i!} (G(x)-c)^i\\ &\equiv\sum\limits_{i=0}^{n} \frac{F^{(i)}(c)}{i!} (G(x)-c)^i\pmod x^{n+1}\\ &\equiv\sum\limits_{i=0}^{n} \frac{ F^{(i)}(c)}{i!} (G(x)-c)^i\pmod x^{n+1}\\ \end{aligned}

所以有:F((G(x)-c)+c)\equiv \mathbb F((G(x)-c)+c)\bmod {(G(x)-c)^{n+1}}=\mathbb F((G(x)-c)+c)

注意到 G(x)-c 没有常数项。

怎么求?

考虑 ODE:

\sum\limits_{i=0}^{m}p_i(x+c)F^{(i)}(x+c)=0\to \sum\limits_{i=0}^{m}p_i(x+c)\mathbb F^{(i)}(x+c)=D(z)\to \sum\limits_{i=0}^{m}p_i(x)\mathbb F^{(i)}(x)=D(z-c)

然后用你擅长的提取系数整式递推就行了,难度在于这个和构造 FG(x) 基本上就是 e^x,ODE 记得是提取 [x^n] 还是 [\frac{x^n}{n!}]

习题(不断更新中):

  1. bell 数

    注意到 F(x)=e^{x-1},G(x)=e^x,ans=[x^n]F(G(x))

    直接推式子:

    \begin{aligned}\ [\frac{x^n}{n!}]e^{e^x-1}&=[\frac{x^n}{n!}]\sum\limits_{i=0}^{n}\frac{1}{i!}(e^x-1)^n\\ &=[\frac{x^n}{n!}]\sum\limits_{i=0}^{n}\frac{1}{i!}\sum\limits_{j=0}^{i}\binom{i}{j}(-1)^{j}e^{(i-j)x}\\ &=\sum\limits_{i=0}^{n}\sum\limits_{j=0}^{i}\frac{(-1)^{j}}{j!}\frac{(i-j)^n}{(i-j)!}\\ &=\sum\limits_{i=0}^{n}\frac{i^n}{i!}\sum\limits_{j=0}^{n-i}\frac{(-1)^j}{j!} \end{aligned}

    使用 ODE:

    \begin{aligned} F(x+1)-F'(x+1)&=0\\ \mathbb{F}(x+1)-\mathbb{F}'(x+1)&=\frac{x^n}{n!}\\ \mathbb{F}(x)-\mathbb{F}'(x)&=\frac{(x-1)^n}{n!}=\frac{1}{n!}\sum\limits_{i=0} ^{n}\binom{n}{i}(-1)^{n-i}x^{i}\\ f_{k}-f_{k+1}&=\frac{(-1)^{n-k}}{(n-k)!} \end{aligned}
  2. 线性插值

    我们已知 $b_X=\sum\limits_{i=0}^{n}a_iX^i=\sum\limits_{i=0}^{n}a_i[\frac{x^i}{i!}]e^{iX}$,求 $\sum\limits_{i=0}^{n}a_ik^i=\sum\limits_{i=0}^{n}a_i[\frac{x^i}{i!}]e^{k}$,所以 $F(x)=x^k,G(x)=e^x$。 使用 ODE: $$ \begin{aligned} kF(x+1)-(x+1)F'(x+1)&=0\\ k\mathbb F(x+1)-(x+1)\mathbb F'(x+1)&=(k-n)\binom{k}{n}x^n\\ k\mathbb F(x)-x\mathbb F'(x)&=(k-n)\binom{k}{n}(x-1)^n\\ kf_i-if_i&=(k-n)\binom{k}{n}\binom{n}{i}(-1)^{n-i} \end{aligned} $$
  3. P5907 数列求和加强版 / SPOJ MOON4

    不难构造出 $G(x)=ae^x,b_X=[x^n]G(x)^i,F(x)=\frac{1-x^{k+1}}{1-x}

    小 F 认为一阶线性 ODE 都是齐次的,邮电部诗人,记住是 \frac{dF(x)}{dx}=P(x)F(x)+Q(x)

    \begin{aligned} F(x)+(x-1)F'(x)&=(x^{k+1}-1)'=(x^{k+1})'\\ F(x+a)+(x+a-1)F'(x+a)&=\left[(x+a)^{k+1}\right]'\\ \mathbb F(x+a)+(x+a-1)\mathbb F'(x+a)&=\left[\sum\limits_{i=0}^{n}\binom{k+1}{i}a^{k+1-i}x^i\right]'+(n+1)x^n\sum\limits_{i=n}^{k}\binom{i}{n}a^{i-n}\\ \mathbb F(x)+(x-1)\mathbb F'(x)&=\left[\sum\limits_{i=0}^{n}\binom{k+1}{i}a^{k+1-i}(x-a)^i\right]'+(n+1)(x-a)^n\sum\limits_{i=n}^{k}\binom{i}{n}a^{i-n}\\ \mathbb F(x)+(x-1)\mathbb F'(x)&=\left[\sum\limits_{i=0}^{n}\binom{k+1}{i}a^{k+1-i}\sum\limits_{j=0}^{i}\binom{i}{j}(-a)^{i-j}x^j\right]'+(n+1)\sum\limits_{i=n}^{k}\binom{i}{n}a^{i-n}\sum\limits_{j=0}^{n}\binom{n}{j}(-a)^{n-j}x^j\\ \end{aligned}

    好了现在有几个问题需要解决:

    1. $$ \begin{aligned} &\sum\limits_{i=0}^{n}\binom{k+1}{i}a^{k+1-i}\sum\limits_{j=0}^{i}\binom{i}{j}(-a)^{i-j}x^j\\ =&\sum\limits_{i=0}^{n}\sum\limits_{j=0}^{i}\binom{k+1}{i}\binom{i}{j}(-1)^{i-j}a^{k+1-j}x^j\\ =&\sum\limits_{i=0}^{n}\sum\limits_{j=0}^{i}\binom{k+1}{j}\binom{k-j}{i-j}(-1)^{i-j}a^{k+1-j}x^j\\ =&\sum\limits_{j=0}^{n}\binom{k+1}{j}a^{k-j}x^j\sum\limits_{d=0}^{n-j}\binom{k+1-j}{d}(-1)^{d}\\ &注意到\\ &\sum\limits_{d=0}^{n-j}\binom{k+1-j}{d}(-1)^{d}\\ =&\sum\limits_{d=0}^{n-j}\left[\binom{k-j}{d}+\binom{k-j}{d-1}\right](-1)^{d}\\ =&\sum\limits_{d=0}^{n-j}\binom{k-j}{d}(-1)^{d}-\sum\limits_{d=0}^{n-j-1}\binom{k-j}{d}(-1)^{d}\\ =&\binom{k-j}{n-j}(-1)^{n-j}\\ &所以原式等于 \sum\limits_{j=0}^{n}(-1)^{n-j}\binom{k+1}{j}\binom{k-j}{n-j}a^{k-j}x^j\\ &显然导数就是\sum\limits_{j=1}^{n}(-1)^{n-j}\binom{k+1}{j}\binom{k-j}{n-j}a^{k-j}jx^{j-1} \end{aligned} $$
    2. $$ \begin{aligned} T(0)&=\sum\limits_{i=1}^{k}a^i=\frac{a^{k+1}-1}{a-1} \\ T(n)&=\sum\limits_{i=n}^{k}\binom{i}{n}a^{i-n}\\ &=\sum\limits_{i=n}^{k}\left[\binom{i-1}{n}+\binom{i-1}{n-1}\right]a^{i-n}\\ &=a\sum\limits_{i-1=n}^{k-1}\binom{i-1}{n}a^{i-1-n}+\sum\limits_{i-1=n-1}^{k-1} \binom{i-1}{n-1}a^{(i-1)-(n-1)}\\ &=a(T(n)-\binom{k}{n}a^{k-n})+T(n-1)-\binom{k}{n-1}a^{k-n+1}\\ &=aT(n)+T(n-1)-\binom{k+1}{n}a^{k-n+1} \end{aligned} $$ 可以直接 $O(n)$ 递推,$(k+1)^{\underline{i}}$ 是好求的。

    最后直接递推的时候从低往高递推不是很方便,但是我们的 \mathbb F 既然是 F 的截断 [x^n]\mathbb F 是容易求的,反着推简单很多。

  4. “Binomial Sum” CF932E

    可以构造出 $F(x)=(1+x)^{k},G(x)=e^x,b_X=[\frac{x^n}{n!}]G(x)^X,ans=[\frac{x^n}{n!}]F(G(x))$。 直接快进到 ODE: $$ \begin{aligned} kF(x)-(x+1)F'(x)&=0\\ kF(x+1)-(x+2)F(x+1)&=0\\ k\mathbb F(x+1)-(x+2)\mathbb F'(x+1)&=(k-n)\binom{k}{n}2^{k-n}x^n\\ k\mathbb F(x)-(x+1)\mathbb F'(x)&=(k-n)\binom{k}{n}2^{k-n}(x-1)^n\\ k\mathbb F(x)-(x+1)\mathbb F'(x)&=(k-n)\binom{k}{n}2^{k-n}\sum\limits_{i=0}^{n}\binom{n}{i}(-1)^{n-i}x^i \end{aligned} $$
  5. CF392C Yet Another Number Sequence

    做法一:

    原题可以写成 \frac{1}{\sqrt{5}}\sum\limits_{i=0}^{n}[(\frac{1+\sqrt 5}{2})^n-(\frac{1-\sqrt 5}{2})^n]i^k,在 \sqrt 5 有二次剩余的时候就和 P5907 一模一样了,那个题的做法可以看我的题解。

    但是 \sqrt 5 在本题没有二次剩余,考虑扩域即可,可以做到 O(k+\log n),考虑如果 \log n 很大是没法接受的数的话你扩域的数 (a+\sqrt 5b)^i 满足 (a+\sqrt 5b)^{p^2}=a+\sqrt 5b,可以做到 O(k+\log p)

    做法二:

    其实还是可以根据斐波那契数列的 GF 直接截断然后得到 ODE 来做的,只是麻烦一点。

    截断可以得到:

    (x^2+x-1)F(x)=(fib_{n-1}+fib_{n})x^{n+1}+fibx^{n+2}-1

    设右边那个为 P(x),两边求导可以得到 ODE 为:

    (2x+1)F(x)+(x^2+x-1)F'(x)=P'(x)

    带入 x+G(0)=x+1 得到:

    (2x+3)F(x+1)+(x^2+3x+1)F'(x+1)=P'(x+1)

    \mathbb F(x)=F(x)\bmod x^{k+1},\mathbb P(x)=P(x)\bmod x^{k+1},就能截断得到:

    (2x+3)\mathbb F(x+1)+(x^2+3x+1)\mathbb F'(x+1)=\mathbb P'(x+1)+Ax^k+Bx^{k+1}

    其中 A=(n+1)[x^{k-1}]F(x+1)+(3n+3)[x^k]F(x+1),B=(n+2)[x^k]F(x+1),对于 F(x+1) 的某一项的系数其实就是求 \sum\limits_{i=n}^{k}fib_i\binom{i}{n},直接扩域后就和 P5907 的某个部分一样的了,可以看我的题解。

    后面带回 x 就能得到:

    (2x+1)\mathbb F(x)+(x^2+x-1)\mathbb F'(x)=[\mathbb P(x+1)\circ (x-1)]'+A(x-1)^n+B(x-1)^{n+1}
  6. P5401 [CTS2019] 珍珠

    不关心珍珠的具体分布,只关心每种珍珠的数量,最后乘上多重组合数,所以直接用 EGF。

    最后对数就是 \sum\limits_{i=1}^{D}\lfloor\frac{cnt}{2}\rfloor\geq m,就是出现次数奇数次的小于等于 n-2m,不妨设 k=n-2m,在 D\leq k 的时候怎么都合法,在 k<0 的时候怎么都不合法,特判掉,此时剩下 k<D

    然后就是枚举选了奇数偶数次的方案数:

    [\frac{x^n}{n!}] \sum\limits_{i=0}^{k}\binom{D}{i}(\frac{e^x-e^{-x}}{2})^i(\frac{e^x+e^{-x}}{2})^{D-i}=\frac{1}{2^D}[\frac{x^n}{n!}] \sum\limits_{i=0}^{k}\binom{D}{i}(e^x-e^{-x})^i(e^x+e^{-x})^{D-i}

    G(x)=e^x,F(x)= \sum\limits_{i=0}^{k}\binom{D}{i}(x-x^{-1 })^i(x+x^{-1})^{D-i}。但是你遇到了有负数次项的 F(x),这不好,我们不会截断形式 Laurent 级数,我们考虑换成没有负数次幂的形式,而且 e^x 上带负数也不影响的,所以可以写成 \frac{1}{2^D}[\frac{x^n}{n!}] e^{-Dx}\sum\limits_{i=0}^{k}\binom{D}{i}(e^{2x}-1)^i(e^{2x}+1)^{D-i}

    这下设 G(x)=e^{2x},F(x)= \sum\limits_{i=0}^{k}\binom{D}{i}(x-1)^i(x+1)^{D-i},我们要求 \sum\limits_{i=0}^{n}(-D)^{n-i}[\frac{x^{i}}{i!}]F(G(x)),这样好做一点。

    回忆 binomial sums 的条件,先求 b_X=\sum\limits_{i=0}^{n}(-D)^{n-i}[\frac{x^i}{i!}](e^{2x})^X=\sum\limits_{i=0}^{n}(-D)^{n-i}(2X)^i=\frac{(-D)^n((\frac{2X}{-D})^{n+1}-1)}{\frac{2X}{-D}-1}=\frac{(2X)^{n+1}-(-D)^{n+1}}{2X+D} X^{n} 可以直接线性筛,底下的可以求线性逆元。

    然后求 F(x) 截断后的系数,首先我们需要 ODE,但似乎 F(x) 有一点复杂,先求导试试。

    \begin{aligned} F(x)'&=\sum\limits_{i=0}^{k}\binom{D}{i}(i(x-1)^{i-1}(x+1)^{D-i}+(D-i)(x-1)^{i}(x+1)^{D-i-1})\\ &=D\sum\limits_{i=0}^{k}\binom{D-1}{i-1}(x-1)^{i-1}(x+1)^{D-1-(i-1)}+D\sum\limits_{i=0}^{k}\binom{D-1}{i}(x-1)^i(x+1)^{D-1-i}\\ &=D\sum\limits_{i=0}^{k}\binom{D-1}{i-1}(x-1)^{i-1}(x+1)^{D-1-(i-1)}+D\sum\limits_{i=0}^{k}\binom{D-1}{i}(x-1)^i(x+1)^{D-1-i}\\ \end{aligned}

    这里的 \binom{D-1}{i-1}\binom{D-1}{i} 提示我们拆组合数,考虑把 F(x) 拆了。

    \begin{aligned} F(x)&=\sum\limits_{i=0}^{k}\binom{D}{i}(x-1)^{i}(x+1)^{D-i}\\ &=\sum\limits_{i=0}^{k}\binom{D-1}{i}(x-1)^{i}(x+1)^{D-i}+\sum\limits_{i=0}^{k}\binom{D-1}{i-1}(x-1)^{i}(x+1)^{D-i}\\ &=(x+1)\sum\limits_{i=0}^{k}\binom{D-1}{i}(x-1)^{i}(x+1)^{D-1-i}+(x-1)\sum\limits_{i=0}^{k}\binom{D-1}{i-1}(x-1)^{i-1}(x+1)^{D-1-(i-1)}\\ &=\frac{x}{D}F'(x)+\sum\limits_{i=0}^{k}\binom{D-1}{i}(x-1)^{i}(x+1)^{D-1-i}-\sum\limits_{i=0}^{k}\binom{D-1}{i-1}(x-1)^{i-1}(x+1)^{D-1-(i-1)}\\ &=\frac{x}{D}F'(x)+\binom{D-1}{k}(x-1)^{k}(x+1)^{D-1-k} \end{aligned}

    所以得到的 ODE 就是,可以把右边设成 P(x)

    DF(x)-xF(x)'=D\binom{D-1}{k}(x-1)^{k}(x+1)^{D-1-k}=P(x)

    然后我们有个好消息,F(x)P(x) 的次数都不超过 D,不用截断,而且左边提取系数发现其实是 (D-i)f_i=[x^i]P(x),甚至不用整式递推,直接求右边的系数就行了,考虑如何提取 P(x) 的系数,一般的我们要提取 Q(x)=(x+1)^a(x-1)^b 的系数,这个 feelcle 讲过,直接求导继续 ODE 转整式递推。

    \begin{aligned} Q(x)'&=b(x+1)^a(x-1)^{b-1}+a(x+1)^{a-1}(x-1)^b\\ Q(x)'&=\frac{b}{x-1}Q(x)+\frac{a}{x+1}Q(x)\\ (x^2-1)Q(x)'&=((a+b)x+b-a)Q(x)\\ (n-1)q_{n-1}-(n+1)q_{n+1}&=(a+b)q_{n-1}+(b-a)q_{n}\\ q_{n+1}&=(b-a)q_{n}+(a+b-n+1)q_{n-1} \end{aligned}

    最后答案就是 \sum\limits_{i=0}^{D}f_{i}b_{i},时间复杂度 O(D\log_{D}n)=O(D)

  7. P4091 [HEOI2016/TJOI2016] 求和

    第二类斯特林数有行和列两种切入法,行就是经典式子 ${i\brace j}j!=\sum\limits_{k=0}^{j}(-1)^{j-k}\binom{j}{k}k^i$,这个能导出一个 $O(n\log n)$ 的 NTT 做法,但是优化不了一点。 列的话就是 ${i\brace j}j!=[\frac{x^i}{i!}](e^x-1)^j$,又是我们喜欢的 $e^x-1$,考虑把这个代回去: $$ \begin{aligned} &\sum\limits_{i=0}^{n}[x^i]\sum\limits_{j=0}^{i}2^j(e^x-1)^{j}\\ =&\sum\limits_{i=0}^{n}[x^i]\sum\limits_{j=0}^{n}2^j(e^x-1)^{j} \end{aligned} $$ 还是发现 $G(x)=e^x,F(x)=\sum\limits_{j=0}^{n}2^j(x-1)^{j}$,求的是 $\sum\limits_{i=0}^{n}[\frac{x^i}{i!}]F(G(x))$。 先考虑求 $b_X=\sum\limits_{i=0}^{n}[\frac{x^i}{i!}]G(x)^{X}=\sum\limits_{i=0}^{n}[\frac{x^i}{i!}]e^{Xx}=\sum\limits_{i=0}^{n}X^i$,对 $X=1$ 容易的,否则就是 $\frac{X^{n+1}-1}{X-1}$,直接筛 $i^{n+1}$,线性求一下逆元就行了。 然后考虑怎么求 $F(x)$ 的系数,因为 $F(x)$ 的最高次项系数都是 $n$ 所以不用截断,直接大力推,比 ODE 容易点。 $$ \begin{aligned} F(x)&=\sum\limits_{i=0}^{n}2^i\sum\limits_{j=0}^{i}\binom{i}{j}(-1)^{i-j}x^j\\ &=\sum\limits_{i=0}^{n}\sum\limits_{j=0}^{n}\binom{i}{j}(-2)^{i-j}2^jx^{j}\\ &=\sum\limits_{j=0}^{n}2^{j}\sum\limits_{i=j}^{n}(-2)^{i-j}\binom{i}{j}x^j \end{aligned} $$ 对 $j=0\sim n$ 求 $\sum\limits_{i=j}^{n}(-2)^{i-j}\binom{i}{j}$ 是容易的,在经典的 P5907 还是讲了在 $a\neq 1$ 的时候 $\sum\limits_{i=n}^{k}\binom{i}{n}a^{i-n}$ 怎么推。 $$ \begin{aligned} T(0)&=\sum\limits_{i=1}^{k}a^i=\frac{a^{k+1}-1}{a-1} \\ T(n)&=\sum\limits_{i=n}^{k}\binom{i}{n}a^{i-n}\\ &=\sum\limits_{i=n}^{k}\left[\binom{i-1}{n}+\binom{i-1}{n-1}\right]a^{i-n}\\ &=a\sum\limits_{i-1=n}^{k-1}\binom{i-1}{n}a^{i-1-n}+\sum\limits_{i-1=n-1}^{k-1} \binom{i-1}{n-1}a^{(i-1)-(n-1)}\\ &=a(T(n)-\binom{k}{n}a^{k-n})+T(n-1)-\binom{k}{n-1}a^{k-n+1}\\ &=aT(n)+T(n-1)-\binom{k+1}{n}a^{k-n+1} \end{aligned} $$ 直接推做就完了,时间复杂度 $O(n)$。
  8. P6667 [清华集训2016] 如何优雅地求和

    原来的做法是考虑混凝土数学里面讲的下降幂多项式后变成卷积,本题有 x 我们把它换成 a 好了。

    给了点值,相当于给咱们 $b_{X}=\sum\limits_{i=0}^{m} f_{i} [\frac{x^{i}}{i!}](e^{x})^{X}$,求: $$ \sum\limits_{j=0}^mf_{j}[\frac{x^j}{j!}]\sum\limits_{i=0}^{n}\binom{n}{i}a^{i}(1-a)^{n-i}e^{ix} $$ 可以构造出 $F(x)=(ax+(1-a))^n$,终于又遇到需要截断的式子了。 直接上 ODE!还是设 $\mathbb F(x+1)=F(x+1)\bmod x^{m+1} \begin{aligned} anF(x)-(ax-a+1)F'(x)&=0\\ anF(x+1)-(ax+1)F'(x+1)&=0\\ an\mathbb F(x+1)-(ax+1)\mathbb F'(x+1)&=(an-am)x^m[x^m]F(x+1)\\ an\mathbb F(x)-(ax-a+1)\mathbb F'(x)&=(an-am)\binom{n}{m}a^m(x-1)^m\\ (an-ai)f_{i}+(a-1)(i+1)f_{i+1}&=(an-am)\binom{n}{m}\binom{m}{i}a^m(-1)^{m-i} \end{aligned}

    然后做完了,时间复杂度 O(m)

  9. 伯努利数

    众所周知伯努利数的生成函数是 \frac{x}{e^x-1},设 G(x)=e^x 不难发现 F(x)=\frac{\ln x}{x-1}

    咕了