数论 - 各类容斥反演 (2)
这是对绝世好文 https://do-while-true.github.io/2022/02/04/「学习笔记」各类容斥反演总结/,备份 的一些照抄和补充,拜谢杜老师!!!
0. 容斥原理
0.1. 容斥原理
现有 \(\{A_1,A_2,\cdots,A_n\}\) 共 \(n\) 个集合,已知某些集合的交,则
\[\left|\bigcup_{t\in A}t\right|=\sum_{\textcolor{red}{\varnothing\ne} S\subseteq \{A_1,A_2,\cdots,A_n\}}(-1)^{\color{red}{|S|+1}}\cdot \left|\bigcap_{t\in S} t\right|
\]
(并转交)
\[\left|\bigcap_{t\in A}t\right|=\sum_{\textcolor{red}{\varnothing\ne} S\subseteq \{A_1,A_2,\cdots,A_n\}}(-1)^{\color{red}{|S|+1}}\cdot \left|\bigcup_{t\in S} t\right|
\]
(交转并)
定义空集子集的交为全集,还有
\[\left|\bigcap_{t\in A}t\right|=|\text{U}|-\left|\bigcup_{t\in A}\bar{t}\right|
=\sum_{S\subseteq \{A_1,A_2,\cdots,A_n\}}(-1)^{\color{red}{|S|}}\cdot \left|\bigcap_{t\in S} \bar{t}\right|
\]
(交转补集交)
0.2. 常用模型
这里集合可以看作是 满足某些限制的集合。
- 不定方程整数解计数
已知 \(\sum_{i=1}^n x_i=m\),\(x_i\in [l_i,r_i]\cap\mathbb{N}\),求解的个数。
- 下限为 \(0\),无上限,插板法易求。
- 下限不为 \(0\),可以转化为下限为 \(0\) 的情况。
- 上限不为 \(0\),对上限容斥。\(\{x_i\}\) 视为状态,\(x_i\in [0,r_i]\) 视为限制,求集合交,使用补集的方式 \(\Theta(2^n)\) 容斥。
- 对序列合法位置容斥 ZROJ2608 禁止复读
- \(n\) 个位置都合法,可以看作 \(n\) 个集合的交,使用补集的方式容斥,再对其优化。详见此题题解。
- P4099 [HEOI2013] SAO / P5405 [CTS2019] 氪金手游
- 可以看作类似树结构的 DAG 拓扑序计数,容斥哪些内向边违反了限制,再对其优化。
0.3. 更多例题
- [ARC093F] Dark Horse
1. 二项式反演
1.1. 组合恒等式
- ARC016F Card Game for Three
- 组合数前缀和问题
- CF1548C The Three Little Pigs
1.2. 二项式反演
把握 “恰好”
- P6478 [NOI Online #2 提高组] 游戏
- P4859 已经没有什么好害怕的了
- CF1707D Partial Virtual Trees
2. 莫比乌斯反演
2.1. 常用数论函数
一个 定义在整数集合上 的实值或复值函数称作一个数论函数或者算术函数。
- \(1(n)\) 或 \(\operatorname{I}(n)=1\)
- \(\operatorname{id}(n)=n\)
- \(\epsilon(n)=[n=1]\)
- 欧拉函数 \(\varphi(n)\)
- 莫比乌斯函数 \(\mu(n)\)
2.2. 常用数论函数的狄利克雷卷积
定义狄利克雷卷积 \((f*g)(n)=\sum_{i\mid n}f(i)g(\frac{n}{i})\)。
运算满足
- \(f*g=g*f\)
- \(f*(g*h)=(f*g)*h\)
- \((f+g)*h=f*h+g*h\)
- \(f=g\Leftrightarrow f*h=g*h\),其中要满足 \(h(1)\ne 0\)
常用数论函数的狄利克雷卷积:
- 任意函数 \(f*\epsilon=f\)
- \(\mu*1=\epsilon\)
- \(\varphi*1=\operatorname{id}\)
- \(\operatorname{id}*\mu=\varphi\),上式左右乘 \(\mu\) 乘得
2.3. 狄利克雷前(后)缀和 / 前(后)缀差分
- 狄利克雷前缀和:对每个 \(n\) 求 \((f*1)(n)\)
- 狄利克雷前缀差分:对每个 \(n\) 求 \((f*\mu)(n)\)
- 前缀和是求 \(g=f*1\),前缀差分是反过来求 \(f=g*\mu\)
- 狄利克雷后缀和:对每个 \(n\) 求 \(\sum_{n\mid d}f(d)1(\frac{d}{n})\)
- 狄利克雷后缀差分:对每个 \(n\) 求 \(\sum_{n\mid d}f(d)\mu(\frac{d}{n})\)
- 任意积性函数的狄利克雷前缀卷积:给定积性函数 \(f(n)\),积性函数 \(g(n)\),对每个 \(n\) 求 \((f*g)(n)\)
- 令 \(G_p(n)\)(\(p\) 为素数)\(=[n=p^k]g(n)\),则 \(g(n)\) 等于所有 \(G_p(n)\) 的狄利克雷卷积和。
- 由于狄利克雷卷积的交换结合律,把所有 \(G_p(n)\) 卷到 \(f(n)\) 上即为答案。
- \((G*f_p)(n)=\sum_{p^k\mid n}G(p^k)f(\dfrac{n}{p^k})\),对于所有 \(p^k\) 枚举其倍数更新,复杂度 \(\Theta(\sum_{p,k}\dfrac{n}{p^k})\),等比数列求和得到 \(O(n\sum\dfrac{1}{p-1})=O(n\log\log n)\)
- 例题:CF1614D2 Divan and Kostomuksha (hard version)
- 例题 \(\gcd\) 卷积:求 \(h(n)=\sum_{\gcd(i,j)=n}f(i)g(j)\)
2.4. 莫比乌斯反演
很平凡的东西,本质上就是狄利克雷前后缀差分 / 和的转化。
也就是:
- \(f\) 是 \(g\) 的狄利克雷前缀和,等价于 \(g\) 是 \(f\) 的狄利克雷后缀差分
- \(f\) 是 \(g\) 的狄利克雷后缀和,等价于 \(g\) 是 \(f\) 的狄利克雷前缀差分