求和式转化

在计数问题中我们经常需要对求和的式子进行转化来加速求和。这里略作整理。

基础-组合恒等式

  • i=0n(ni)=2n\sum_{i=0}^{n}\binom{n}{i}=2^{n}

  • i=0naibni(ni)=(a+b)n\sum_{i=0}^{n}a^ib^{n-i}\binom{n}{i}=(a+b)^n

    二项式定理。

  • (nm)(mk)=(nk)(nkmk)\binom{n}{m}\binom{m}{k}=\binom{n}{k}\binom{n-k}{m-k}

    当外层枚举的变量仅为 jj 时,我们可以利用这个恒等式将 n,kn,k 提出并把求和移到后面。后面的求和通常可以用 (1)(1) 式优化。

  • i=0n(ni)(mki)=(n+mk)\sum_{i=0}^{n}\binom{n}{i}\binom{m}{k-i}=\binom{n+m}{k}

    n,m,kn,m,k 为常量时这个等式非常方便。

  • (nm)mk=(nkmk)nk\binom{n}{m}m^{\underline{k}}=\binom{n-k}{m-k}n^{\underline{k}}

    组合数也可以实现下降幂的转化。


基础-斯特林公式

  • nm=i=0m(mi){ni}i!n^m=\sum_{i=0}^{m}\binom{m}{i}\begin{Bmatrix}n\\i\end{Bmatrix}i!

    注意到无论是斯特林数还是组合数当上面的数比下面的数大时均为 00 ,所以枚举的上界可以是 nn 也可以是 mm

  • {ij}=k=0j(1)k+j(jk)ki\begin{Bmatrix}i\\j\end{Bmatrix}=\sum_{k=0}^{j}(-1)^{k+j}\binom{j}{k}k^i

    拆斯特林数的方法。可以由 (1)(1) 二项式反演得到。

  • xn=i=0n{ni}xixn=i=0n[ni]xix^n=\sum_{i=0}^{n}\begin{Bmatrix}n\\i\end{Bmatrix}x^{\underline{i}}\\ x^{\overline{n}}=\sum_{i=0}^{n}\begin{bmatrix}n\\i\end{bmatrix}x^i

    斯特林数给我们提供了拆幂次项以及下降幂/上升幂/普通幂之间相互转化的工具。


技巧

  • 当枚举的变量 ii 到某个值时,也许求和式中的斯特林数/排列组合数/上升下降幂就变为 00 了,常用这点来修改上下边界。

  • 任何的 \sum 符号都是可以互换的(当然,你要确保每一层的上下界不变)。这一点非常重要。

    • 可以使本不在一个 \sum 内的两个数乘到一起,再用恒等式变幻。
    • 可以将变量提出来,得到变量前的系数。
    • \cdots
  • 当枚举的范围 nn 特别大 (109)(10^9) 时,并且式子中的幂次项的幂次范围不大时,可以考虑用斯特林公式。

  • 利用斯特林公式可以实现普通幂/下降幂/上升幂多项式之间的转化。以普通幂转下降幂为例

    F(x)=i=0naixi=i=0naij=0i{ij}xj=j=0nxji=jnai{ij}F(x)=\sum_{i=0}^{n}a_ix^i=\sum_{i=0}^{n}a_i\sum_{j=0}^{i}\begin{Bmatrix}i\\j\end{Bmatrix}x^{\underline{j}}=\sum_{j=0}^{n}x^{\underline{j}}\sum_{i=j}^{n}a_i\begin{Bmatrix}i\\j\end{Bmatrix}

    后面的 \sum 即为系数

  • 注意二项式定理的灵活运用。(a+b)n(a+b)^na,ba,b 可以任意指定。


实战

  • i=1n(ni)ik(mod109+7)\sum_{i=1}^{n}\binom{n}{i}i^k \pmod{10^9+7}

    Hint:1n109,1k1031\leq n\leq 10^9,1\leq k\leq 10^3

    思路: nn 范围比较大,但 kk 范围比较小,考虑用斯特林公式展开。

    i=1n(ni)j=0i{kj}(ij)j!\sum_{i=1}^{n}\binom{n}{i}\sum_{j=0}^{i}\begin{Bmatrix}k\\j\end{Bmatrix}\binom{i}{j}j!

    仔细观察,发现两个组合数很有特点,与 (2)(2) 形式一致。考虑交换求和符号

    j=0k{kj}j!i=jn(ni)(ij)=j=0k{kj}j!i=jn(nj)(njij)=j=0k{kj}j!(nj)i=jn(njij)=j=0k{kj}j!(nj)i=0nj(nji)=j=0k{kj}j!(nj)2nj\begin{aligned} \sum_{j=0}^{k}\begin{Bmatrix}k\\j\end{Bmatrix}j!\sum_{i=j}^{n}\binom{n}{i}\binom{i}{j}&=\sum_{j=0}^{k}\begin{Bmatrix}k\\j\end{Bmatrix}j!\sum_{i=j}^{n}\binom{n}{j}\binom{n-j}{i-j}\\&=\sum_{j=0}^{k}\begin{Bmatrix}k\\j\end{Bmatrix}j!\binom{n}{j}\sum_{i=j}^{n}\binom{n-j}{i-j}\\&=\sum_{j=0}^{k}\begin{Bmatrix}k\\j\end{Bmatrix}j!\binom{n}{j}\sum_{i=0}^{n-j}\binom{n-j}{i}\\&=\sum_{j=0}^{k}\begin{Bmatrix}k\\j\end{Bmatrix}j!\binom{n}{j}2^{n-j} \end{aligned}

    做完了。

  • i=0nj=0i{ij}2jj!\sum_{i=0}^{n}\sum_{j=0}^{i}\begin{Bmatrix}i\\j\end{Bmatrix}2^jj!

    Hint:1n1051\leq n\leq 10^5

    思路:这个式子平平无奇。我们尝试打开斯特林数让式子有趣一点。

    i=0nj=0i2jj!k=0j(1)k+j(jk)ki\sum_{i=0}^{n}\sum_{j=0}^{i}2^jj!\sum_{k=0}^{j}(-1)^{k+j}\binom{j}{k}k^i

    发现除了 kik^i 项以外所有的项都与 ii 无关。考虑将 kk 提前枚举,再把 jj 拆成卷积的形式。

    i=0nk=0nkik!j=ki(1)jk(jk)!j!2j1\sum_{i=0}^{n}\sum_{k=0}^{n}\frac{k^i}{k!}\sum_{j=k}^{i}\frac{(-1)^{j-k}}{(j-k)!}\cdot\frac{j!2^j}{1}

    注意到后面 jj 枚举的东西只与 kk 有关。不妨设为 aka_k

    i=0nk=0nkiakk!=k=0nakk!i=0nki=k=0nakk!kn+11k1\sum_{i=0}^{n}\sum_{k=0}^{n}k^i\frac{a_k}{k!} =\sum_{k=0}^{n}\frac{a_k}{k!}\sum_{i=0}^{n}k^i=\sum_{k=0}^{n}\frac{a_k}{k!}\cdot\frac{k^{n+1}-1}{k-1}

    aka_k 是可以用减法卷积求的。所以这个题就做完了。

  • k=0nF(k)×xk×(nk)(modp)\sum_{k=0}^{n}F(k)\times x^k\times \binom{n}{k} \pmod{p}

    其中 F(x)=i=0maixiF(x)=\sum\limits_{i=0}^{m}a_ix^i

    Hint:1n,x,p109,1m1031\leq n,x,p\leq 10^9,1\leq m\leq 10^3

    思路:看上去后面的东西与第一道例题很相似,我们尝试打开。

    k=0nF(k)×(nk)i=0k(xi){ki}i!\sum_{k=0}^{n}F(k)\times \binom{n}{k}\sum_{i=0}^{k}\binom{x}{i}\begin{Bmatrix}k\\i\end{Bmatrix}i!

    后面那两个组合数没有一个字母一样,显然不可做了。换个想法。拆普通幂的方法还有第二条斯特林公式。

    如果把多项式 F(x)F(x) 带入 kk ,再放入求和式内,我们会得到

    k=0ni=0maiki×xk×(nk)=k=0ni=0m(nk)aiki×xk=i=0maik=0n(nk)kixk\sum_{k=0}^{n}\sum_{i=0}^{m}a_ik^i\times x^k\times \binom{n}{k}=\sum_{k=0}^{n}\sum_{i=0}^{m}\binom{n}{k}a_ik^i\times x^k=\sum_{i=0}^{m}a_i\sum_{k=0}^{n}\binom{n}{k}k^ix^k

    内层的枚举中,各字母特点极似组合数乘下降幂的特点。

    根据技巧中的第四条将 F(x)F(x) 转变为下降幂多项式 F(x)=i=0maixi=i=0mbixiF(x)=\sum\limits_{i=0}^{m}a_ix^i=\sum\limits_{i=0}^{m}b_ix^{\underline{i}} ,我们将 xix^{\underline{i}} 带进去试试。

    i=0mbik=0n(nk)kixk=i=0mbinik=0n(niki)xk=i=0mxibinik=0ni(nik)xk=i=0mxibini(x+1)ni\begin{aligned} \sum_{i=0}^{m}b_i\sum_{k=0}^{n}\binom{n}{k}k^{\underline{i}}x^k&=\sum_{i=0}^{m}b_in^{\underline{i}}\sum_{k=0}^{n}\binom{n-i}{k-i}x^k\\&=\sum_{i=0}^{m}x^ib_in^{\underline{i}}\sum_{k=0}^{n-i}\binom{n-i}{k}x^k\\&=\sum_{i=0}^{m}x^ib_in^{\underline{i}}(x+1)^{n-i} \end{aligned}

    利用二项式定理成功将 nn 提到了指数上。