数论 - 各类容斥反演 (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. 组合恒等式

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\) 的狄利克雷前缀差分
posted @ 2023-09-30 16:15  Network_Error  阅读(35)  评论(0)    收藏  举报