二项式反演&约束容斥

二项式反演

前导

对于一个错排 \(f(i)\) 可以有通项公式

\[f(n)=\sum_{i=0}^n\binom{n}{i}(-1)^i(n-i)! \]

不妨设 \(g(i)=i!\)。则 \(g(i)\) 有一个显而易见的表达方式

\[g(i)=\sum_{i=0}^n\binom{n}{i}f(n-i)=\sum_{i=0}^n\binom{n}{i}f(i) \]

通常用最后化的,那么实际意义就是有 \(i\) 个位置是错排的,然后 \(n-i\) 位是正常的。

正题

通常二项式反演要解决求 \(n\) 个元素中恰有 \(k\) 个元素满足某个条件的方案数。然后就有几个定义:

  1. \(f(i)\) 表示恰有 \(i\) 个元素满足条件的方案数。
  2. \(g(i)\) 表示钦定\(i\) 个元素满足条件的方案数。

\(f(i)\) 是好理解的,问题就是什么是 \(g(i)\) 的钦定。这里指的是至少有 \(i\) 个元素满足条件,但是可以有更多元素与它们共同组成,即可能有重复。形式化的,\(S_i\) 表示所有与第 \(i\) 个元素共同满足条件的集合。那么

\[g(i)=\sum_{p_1<p_2<\cdots<p_i}|S_{p_1}\cap S_{p_2}\cap\cdots\cap S_{p_i}| \]

对于二项式反演,有结论:

\[g(i)=\sum_{j=i}^n \binom{j}{i}f(j) \]

\[f(i)=\sum_{j=i}^n (-1)^{j-i}\binom{j}{i}g(j) \]

证明 $$f(i)=\sum_{j=i}^n (-1)^{j-i}\binom{j}{i}g(j)$$ $$=\sum_{j=i}^n (-1)^{j-i}\binom{j}{i}\sum_{k=j}^n \binom{k}{j}f(k)$$ $$=\sum_{j=i}^n (-1)^{j-i}\sum_{k=j}^n \binom{j}{i}\binom{k}{j}f(k)$$ $$=\sum_{k=i}^n f(k)\sum_{k=j}^n (-1)^{j-i}\binom{j}{i}\binom{k}{j}$$ $$=\sum_{k=i}^n\binom{k}{n} f(k)\sum_{j=i}^k (-1)^{j-i}\binom{k-n}{k-j}$$ $$=\sum_{k=i}^n\binom{k}{n} f(k)(1-1)^{j-n}$$ $$=\sum_{k=i}^n\binom{k}{n} f(k)[j==i]$$ $$\binom{i}{i} f(i)$$ $$=f(i)$$

约束容斥

通常用来解决与最大公约数或是一些循环节有关的东西。

首先令 \(f(x)\) 表示为满足题目要求条件得到 \(\gcd=x\) 的方案数。要求这个可以求另一个 \(g(x)\) 表示所有 \(\gcd \bmod x=0\) 的方案数。那么就有

\[f(x)=g(x)-\sum_i f(ix) \]

通常 \(g(x)\) 会较为好求,那么就可以用这种方法得到 \(f(x)\)。比如计算满足某种条件的最大公约数之和就可以直接 \(\sum i\cdot f(i)\)

posted @ 2025-03-08 08:37  tanghg  阅读(282)  评论(0)    收藏  举报