反演
二项式反演
证明如下:
有式子为:
\(\sum_{i=0}^n (-1)^i \binom{n}{i} = [n=0]\)
代入原式:
有等价形式:
P4859 已经没有什么好害怕的了
恰好不好处理,将其处理成至少 \(k\) 个 \(a<b\),设计 \(dp_{i,j}\) 表示前 \(i\) 中有 \(j\) 个 \(a<b\) 的方案数,直接转移即可。反演得到 \(ans = \sum_{i=k}^n \binom{i}{k}g(i)(-1)^{i-k}\)。
P6478 [NOI Online #2 提高组] 游戏
设 \(g(i)\) 表示非平局回合数至少为 \(i\) 的方案数,\(f(i)\) 表示非平局回合数恰好为 \(i\) 的方案数。则有 \(g(i) = \sum_{k=i}^m \binom{k}{i} f(k)\),进行二项式反演。\(g(i)\) 求解进行树形 dp,设 \(dp_{i,j}\) 表示以 \(i\) 为根子树非平局回合数至少为 \(j\)。
P9850 [ICPC 2021 Nanjing R] Ancient Magic Circle in Teyvat
二项式反演转为至少 \(i\) 条边为红,只需求 \(\sum_{i=0}^5 g(i)(-1)^i\)。
- \(g(0) = \binom{n}{4}\)
- \(g(1) = m \binom{n-2}{2}\)
- \(g(2) = \sum (n-3)\binom{d_i}{2} + \binom{m}{2} - \sum \binom{d_i}{2}\),考虑对边和邻边,\(d_i\) 为 \(i\) 度数
- \(g(3) = \sum \binom{d_i}{3} + (n-3)c_3 + \sum_{(u,v)} (d_u-1)(d_v-1) - 3c_3\),考虑菊花,三元环,链,对于一个三元环,其每条边都会被链多计入一次,所以多计入三倍三元环个数,\(c_3\) 为三元环个数
- \(g(4) = \sum ct_i (d_i-2) + c_4\),考虑三元环拉出去一条边,四元环。\(ct_i\) 为包含 \(i\) 的三元环个数。
- \(g(5) = \sum_{(u,v)} \binom{cs(u,v)}{2}\),考虑两个三元环拼在一起,\(cs(u,v)\) 为包含 \((u,v)\) 的三元环个数。
将图重定向,度数小连向度数大,度数相同编号小连向编号大,有点出度 \(\le \sqrt{m}\)。三元环枚举最小的点,枚举一条出边,和 \(u\to v, v\to w\) 边。四元环枚举最大的点,拆成 \(v\to u, (v,w)\),这样总时间才为 \(m\sqrt{m}\)。
子集反演
证明同二项式反演类似:
P6442 [COCI 2011/2012 #6] KOŠARE
子集反演。将恰好全部转为至多,设 \(dp_S\) 表示所选范围至多为 \(S\) 中方案数,只需要知道 \(A \setminus S\) 集合包含有多少元素即可,高维前缀和维护。反演得到 \(ans = \sum_{S} f(S)(-1)^{n-|S|}\)。
AT_arc101_c [ARC101E] Ribbons on Tree
子集反演。设计出来 \(dp_{i,j}\) 表示 \(i\) 子树内 \(i\) 所在连通块大小为 \(j\)。直接把容斥系数记录在 \(dp\) 中,树形 dp 转移即可。
\(\min-\max\) 反演
考虑最大值的贡献为 \(1\),非最大值的比其大的有 \(k\) 个数,从中选奇数个和偶数个的系数相同贡献为 \(0\)。
其可以转化为期望形式:
类似地,\(\operatorname{lcm}-\gcd\) 也可以使用上述式子。\(\gcd\) 本质为质因子的 \(\min\),而 \(\operatorname{lcm}\) 本质为质因子的 \(\max\)。
可以进一步推广:
证明考虑 \(\min(T)\) 在为 \(Kthmax(S)\) 时时贡献为 \(1\),其他的二项式系数奇偶相抵。更严谨的证明如下:
其中 \(f(|T|,k)\) 是容斥系数。将序列 \(A\) 从大到小排序,将 \(\min\) 替换掉。
我们希望只有当 \(i=k\) 时造成贡献,则有:
经过观察,\(f(j,k) = (-1)^{j-k} \binom{j-1}{k-1}\),此时左边会多出 \(\binom{i-1}{k-1}\),发现不会对答案造成影响。证毕。
P3175 [HAOI2015] 按位或
\(\min - \max\) 反演。设 \(\min(S)\) 表示集合 \(S\) 中第一个被标记的步数,\(\max(S)\) 表示集合 \(S\) 中全部被标记的步数。 原问题即求 \(E(\max(U))\),可求出 \(E(\min(S))\),反演即可得到答案。注意分母为零时也是 INF。
P4707 重返现世
有 \(E(kmax(S)) = \sum_{T \subset S} (-1)^{|T|-k} \binom{|T|-1}{k-1} E(\min(T))\)。有 \(k \le 10,m \times \min(T) \le 10^4,n \le 10^3\),则设计 \(dp_{i,k,j}\) 表示考虑前 \(i\) 个元素,在 \(K=k\) 时答案,概率之和为 \(j\)。若不选当前元素,有 \(dp_{i,k,j} \leftarrow dp_{i-1,k,j}\);若选择当前元素,则 \(|T|\) 会变大 \(1\),有 \(\binom{|T|}{k-1} = \binom{|T|-1}{k-1} + \binom{|T|-1}{k-2}\),则可以从 \(dp_{i-1,k,j-a_i}\) 和 \(dp_{i-1,k-1,j-a_i}\) 转移,同时考虑 \((-1)^{|T|-k}\) 系数,有 \(dp_{i,k,j} \leftarrow -dp_{i-1,k,j-a_i} + dp_{i-1,k-1,j-a_i}\)。
初值设置为 \(dp_{0,0,0}=0,dp_{0,k,0} = -1\),则 \(dp_{1}\) 中只有 \(dp_{1,1}\) 有值,符合状态。滚动数组优化即可。
AT_agc038_e [AGC038E] Gachapon
先 \(\min - \max\) 容斥,\(E(\max (S)) = \sum_{T \subset S} (-1)^{|T|+1} E(\min(T))\),此时 \(\min(T)\) 表示 \(T\) 集合内的数第一次被选中(即选择了 \(B_i\) 次)的期望。
有一个 trick 是求集合内数第一次被选中的期望步数,可以求每一步都未被选中(在这里即未选中 \(B_i\) 次)的概率之和(包括第 \(0\) 步)。 仔细思考发现这个本质做了一个差分状物。
现在开始求 \(\min(T)\),选中集合中的数的期望步数为 \(\dfrac{\sum{A_i}}{\sum_{i \in T} A_i}=P\)。选中集合 \(k\) 次都未选中任意一个数的概率相当于将 \(k\) 分成 \(|T|\) 份,要求每一份均 \(< B_i\),设 \(w(T) = \sum_{i \in T} A_i\),即 \(k!\sum_{i \in T,c_1 +\cdots c_{|T|} = k} \dfrac{A_i^{c_i}}{c_i!w(T)^{c_i}}\),设 \(r = \sum_{i \in T} (B_i-1)\),按照如上 trick 可求出 \(\min(T) = P \times \sum_{k=0}^{r} k! w(T)^{-k}\sum_{i \in T,c_1 +\cdots c_{|T|} = k} \dfrac{A_i^{c_i}}{c_i!}\)。
由于 \(w(T)^{-k}\) 不好转移,于是记录 \(dp_{i,j,k}\) 表示考虑前 \(i\) 个元素,\(w(T)=j,\sum c_i=k\) 的答案。转移显然,初始状态为 \(dp_{0,0,0}=-1\),滚动数组优化即可。
斯特林反演
主要用于处理图联通问题。
Topcoder 13444 CountTables
只关心行限制忽略列限制答案为 \((c^m)^{\underline{n}}\),设 \(g(i)\) 表示至多 \(i\) 列不相同的方案数,有 \(g(i) = \left\{\begin{matrix} m\\i \end{matrix}\right\} (c^i)^{\underline{n}}\)。设 \(f(i)\) 表示恰好 \(i\) 列互不相同,则有 \(g(i) = \sum_{j=0}^i \left\{\begin{matrix} i\\j \end{matrix}\right\} f(j)\),由斯特林反演得 \(f(i) = \sum_{j=0}^i (-1)^{i-j} \left[\begin{matrix} i\\j \end{matrix}\right] g(i)\),答案为 \(f(m)\)。
BZOJ 4671 异或图
设 \(g(i)\) 表示整个图至少 \(i\) 个连通块的方案数,\(f(i)\) 表示恰好 \(i\) 个连通块的方案数,有 \(g(i) = \sum_{k=i}^n \left\{\begin{matrix} k\\i \end{matrix}\right\} f(k)\),反演得 \(f(i) = \sum_{k=i}^n (-1)^{k-i}\left[\begin{matrix} k\\i \end{matrix}\right]g(k)\),答案为 \(f(1)\)。问题来到求出 \(g(i)\)。
对 \(n\) 个点进行子集划分,将每个图中连接了不同子集点的边二进制位设成 \(1\),否则为 \(0\),答案即为集合异或为 \(0\) 的方案数,线性基求解,设线性基最后剩下的数个数为 \(c\),则答案为 \(2^{s-c}\)。
单位根反演
设 \(F(x)\) 是一个 \(m\) 次多项式,\(F(x) = \sum_{i=0}^m f_ix^i\),则有:
单位根在模意义下与原根等价。
原根
对于 \(1\le x \le n-1\) 的所有 \(x\),若满足 \(x\) 模 \(n\) 的阶为 \(\varphi(n)\),则称 \(x\) 是 \(n\) 的原根。
若 \(\gcd(x,n)=1\),则由欧拉定理得 \(x^{\varphi(n)} \equiv 1 (\bmod n)\),则存在 \(x^y \equiv 1 (\bmod m)\),称最小的 \(y\) 为 \(x\) 模 \(n\) 的阶,\(\delta_n(x) = y\),其中 \(\delta_n(x)\) 为 \(x\) 模 \(n\) 的阶。
性质 \(1\)
若存在 \(x^n \equiv 1 (\bmod m)\),则有 \(\delta_m(x) | n\),使用带余除法证明。
性质 \(2\)
\[\delta_m(a^k) = \frac{\delta_m(a)}{\gcd(\delta_m(a), k)} \]
性质 \(3\)
\(n\) 的最小原根 \(\le n^{0.25}\)。
性质 \(4\)
\(n\) 存在原根当且仅当 \(n = 1,2,4\) 或 \(n=p^k\) 或 \(n=2p^k\),其中 \(p\) 为奇素数。
则求出所有原根只需要先判断 \(n\) 是否有原根,若有则枚举 \(1 \sim n\),对于 \(\varphi(n)\) 的所有真因子 \(d\) 判断 \(i^d \equiv 1 (\bmod n)\) 是否成立,若成立则不是原根。这样可以实现 \(n^{0.25} \log n\) 时间找出最小原根 \(g\),然后对于所有 \(\gcd(p,\varphi(n))\) 且 \(1 \le p \le \varphi(n)\),\(g^p \bmod n\) 就是其原根。所以有性质 \(5\)。
性质 \(5\)
\(n\) 的原根数量为 \(\varphi(\varphi(n))\)。
有 \(w_n^1 \equiv g^{\frac{p-1}{n}} (\bmod p)\),其中 \(p\) 为素数,\(g\) 为 \(p\) 的最小原根,同时要求 \(n | p-1\)。
一般情况下,\(p=998244353\),\(n\) 为 \(2\) 的次幂。因为 \(p = 119\times 2^23+1\),更容易 \(n|p-1\),同时 \(998244353\) 的最小原根为 \(3\),更方便计算。
P5591 小猪佩奇学数学
下取整可以转化为范围内有多少整除的数。
有 \(\sum_{i=0}^n \binom{n}{i}i=n2^{n-1}\)。
其中 \(w\) 是 \(k\) 次单位根。
关于第二步为何将 \(l,j\) 求和顺序交换而不直接使用等比数列求和公式的原因为当 \(k|j\) 的时候分母为 \(0\),继而交换求和顺序只需要特判 \(l=0\) 即可。
loj6485 LJJ 学二项式定理
简单推式子,使用单位根反演加二项式定理。
有 \(w_4^1 = g^{\frac{mod-1}{4}}\),\(998244353\) 最小原根为 \(3\),可直接计算。
莫比乌斯反演
了解莫比乌斯函数,\(\mu (n)\) 满足 \(n=1\) 时为 \(1\);若其存在平方因子为 \(0\);否则其质因数个数为奇数为 \(-1\),为偶数为 \(1\)。
有重要性质:\([n = 1] = \sum_{i | n} \mu (i)\)。考虑容斥进行证明。关于 \(\gcd\) 的式子似乎只需要用到该性质而无需莫比乌斯反演。
以下均借鉴学习于 An_Account 大神的博客。
例 \(1\)
求 \(\sum_{i=1}^n \sum_{j=1}^m [\gcd(i,j) = 1](n < m)\)。
关于 \(\gcd\) 一般做法为枚举 \(\gcd\) 或 \(\gcd\) 的因子来交换求和顺序:
下面式子显然可以整除分块做。
例 \(2\)
求 \(\sum_{i=1}^n \sum_{j=1}^m [\gcd(i,j) = k](n<m)\)。
将式子都除以 \(k\),即 \(\sum_{i=1}^{\left\lfloor \frac{n}{k} \right\rfloor } \sum_{j=1}^{\left\lfloor \frac{m}{k} \right\rfloor } [\gcd(i,j) =1]\) 转化为上述题目。
例 \(3\)
求 \(\sum_{i=1}^n\sum_{j=1}^m ij[\gcd(i,j) =k](n<m)\)。
同上然后转化:
后者为等差数列,直接求解即可。
例 \(4\)
求 \(\sum_{i=1}^n \sum_{j=1}^m \operatorname{lcm}(i,j) (n<m)\)。
先考虑 \(O(n) - O(n)\)。
对 \(\left\lfloor \frac{n}{d} \right\rfloor\) 分块,同时对 \(\left\lfloor \frac{n}{dk} \right\rfloor,\left\lfloor \frac{m}{dk} \right\rfloor\) 分块,预处理 \(\mu(k)k^2\) 前缀和即可做到 \(O(n) - O(n)\)。
这就结束了?
设 \(T= dk,f(n) = \sum_{i=1}^n i\),则原式等于:
将 \(\sum_{k | T} \mu(k)k\) 单独提出来,设 \(h(n) = \sum_{k | n} \mu(k) k,f(n) = \sum_{k|n} \mu(k),g(n) = \sum_{k|n} k\),则有 \(h = fg\),由于积性函数具有封闭性,故 \(h\) 也为积性函数。考虑使用线性筛预处理 \(h\)。则需要处理一个问题,即 \(p\) 为质数,且 \(p | n\),则 \(h(np)\) 的值如何求。
发现 \(np\) 因子质因数分解后,若 \(p\) 该项次数未满,则其为 \(n\) 的因子;若满了则其莫比乌斯函数为 \(0\)。所以有 \(h(np) =h(n)\)。所以就可以线性预处理出来 \(h\) 前缀和。
将上述式子分块后即可做到 \(O(n) - O(\sqrt{n})\)。
例 \(5\)
求 \(\sum_{i=1}^n \sum_{j=1}^m d(ij) \ (n<m)\),其中 \(d(i)\) 表示 \(i\) 的约数个数。
有性质 \(d(ij) = \sum_{x|i}\sum_{y|j} [\gcd(x,y)=1]\)。考虑对于其一个质因子 \(p\) 考虑。
设 \(f(i,p)\) 表示 \(i\) 中包含质因子 \(p\) 的个数,则有 \(f(ij,p) = f(i,p)+f(j,p)\)。而想要使 \(\gcd(x,y) =1\),就需要 \(f(x,p)=0,f(y,p)=[0,f(j,p)]\) 或 \(f(x,p) = [0,f(i,p)],f(y,p)=0\),总共为 \(f(i,p)+f(j,p)+1=f(ij,p)+1\) 种情况,与 \(d(ij)\) 计算方法相同,即质因数幂次加一之积。
则原式可化为:
设 \(f(n) = \sum_{i=1}^n \left\lfloor \frac{n}{i} \right\rfloor\),发现 \(\left\lfloor \frac{n}{i} \right\rfloor\) 其实是 \([1,n]\) 中 \(i\) 的倍数个数,则 \(f(n)\) 表示 \([1,n]\) 的因数个数和,所以 \(f(n)=f(n-1)+d(n)\),线性筛的同时处理 \(d(n)\) 即可做到 \(O(n)\) 预处理 \(f\) 数组。故最终为 \(O(n) - O(\sqrt{n})\)。
还有两个练习,要启动了,也鸽一下。

浙公网安备 33010602011771号