W
e
l
c
o
m
e
: )

[数论] 莫比乌斯反演

基本函数不介绍了,这篇纯属给自己复习用的。

莫比乌斯/欧拉 反演

\[1. \sum_{d|n}\mu(d)=[n=1] \Leftrightarrow \mu\ \ast \operatorname{1} = \varepsilon \]

证明:

首先枚举 Squarefree number(因为这样 \(\mu\) 才有贡献),枚举其质因子个数,单个贡献为 \((-1)^{cnt}\),总共有 \(C_{m}^{cnt}\) 个。

\[\sum_{d|n}\mu(d)=\sum_{cnt=1}^{m} (-1)^{cnt} \times C_{m}^{cnt} \]

二项式定理转化成 \(0^m\),当 \(m=1\)\(n=1\) 时为 \(1\),否则为 \(0\)

\[2.\sum_{d|n}\varphi(d)=n \Leftrightarrow \varphi\ \ast \operatorname{1} = \operatorname{id} \]

证明:

考虑 \(\varphi *1 = id \Leftrightarrow \varphi = id *\mu\)

假设其成立,则:

\[\varphi(n)=\sum_{d|n} \mu(d) \times \frac{n}{d} \]

仍然是上面证明的套路,令 \(P^{n, cnt}\) 表示某个由 \(cnt\) 个互不相同的 \(n\) 的质因子组成的集合,则:

\[=\sum_{cnt=0}^m (-1)^d \times (\sum_{P^{n, cnt}} \frac{n}{\prod_{i=1}^{cnt}P_i}) \]

现在想要证明这个柿子与 \(\varphi(n)\) 等价,聪明人已经看出来这是容斥原理了。

还不明白?

我们知道 \(\varphi(n)\) 的意思为 \([1-n]\) 中与 \(n\) 互素的数的个数,其实就是 \([1-n]\) 中因子没有 \(P^{n, m}\) 的个数,也就是说,同时不满足被 \(P_{1}\) 整除,被 \(P_2\) 整除 \(\dots\) 的数的个数。记 \(A_i\)\([1-n]\) 中被 \(p_i\) 整除的数的集合,则:

\[\varphi(n)=|\bar A_1 \cap \bar A_2 \cap \dots \cap \bar A_m| \]

\(\bar A\) 表示 \(A\) 的补集)

根据容斥原理,就有:

\[\varphi(n)=\sum_{i=0}^{m} (-1)^m \sum_{b_1 < b_2 \dots < b_i} | \cup A_{b}| \]

\(\cup A_b\) 表示 \(A_{b_1} \cup A_{b_2} \dots \cup A_{b_i}\),不是广义并。

那么这个 \(\cup A_b\) 是什么呢?由于质因子互相互质,所以直接用 \(n\) 除它们的乘积即可,就得到了我们原来的推导式。


P3455 [POI2007]ZAP-Queries + P2522 [HAOI2011]Problem b

容斥成下面的形式:

\[\sum_{i=1}^{n}\sum_{j=1}^{m} [\gcd(i, j)=S] \]

\[=\sum_{i=1}^{n/S}\sum_{j=1}^{m/S} [\gcd(i, j)] \]

\[=\sum_{i=1}^{n/S}\sum_{j=1}^{m/S} \sum_{d|\gcd(i, j)}\mu(d) \]

技巧:枚举 \(d\),一个显然的事实:\(d|\gcd(i, j) \Leftrightarrow d|i \wedge d|j\)

\[=\sum_{d=1}^{n/S} \mu(d) \left \lfloor \frac{n}{dS} \right \rfloor \left \lfloor \frac{m}{dS} \right \rfloor \]

预处理 \(\mu\) 前缀和,数论分块单次 \(\sqrt{n}\)

P2257 YY的GCD

\[\sum_{i=1}^{n}\sum_{j=1}^{m} [\gcd(i, j)\in Prime] \]

\[=\sum_{p\in Prime}\sum_{i=1}^{n}\sum_{j=1}^{m} [\gcd(i, j) = p] \]

\[=\sum_{p\in Prime}\sum_{i=1}^{n}\sum_{j=1}^{m} [\gcd(i, j) = p] \]

\[=\sum_{p\in Prime}\sum_{d=1}^{n/p} \mu(d) \left \lfloor \frac{n}{dp} \right \rfloor \left \lfloor \frac{m}{dp} \right \rfloor \]

技巧:令 \(T=dp\)

\[\sum_{T=1}^{n} \left \lfloor \frac{n}{P} \right \rfloor \left \lfloor \frac{m}{P} \right \rfloor \sum_{p \in Prime \wedge p|T} \mu(\frac{T}{p}) \]

\(f(T)=\sum_{p \in Prime \wedge p|T} \mu(\frac{T}{p})\), 显然这东西是直接珂以暴力 \(n\ln n\) 求出的,预处理完后整除分块。

P3327 [SDOI2015]约数个数和

\[\sum_{i=1}^{n}\sum_{j=1}^{m} \sigma_0 (ij) \]

\(\sigma_0 (ij)\) 并不好弄,我们考虑把它拆成我们认识的其他积性函数,分别枚举 \(i, j\) 的因数 \(x, y\),若这一对 \((x, y)\) 有贡献当且仅当 \([\gcd(x, y)]\) (若不互质珂以把因数提出来放到另一个数里面),所以柿子变为:

\[\sum_{i=1}^{n}\sum_{j=1}^{m} \sum_{x|i} \sum_{y|j} [\gcd(x, y)] \]

\[=\sum_{i=1}^{n}\sum_{j=1}^{m} \sum_{x|i} \sum_{y|j} \sum_{d|gcd(x, y)} \mu(d) \]

改变枚举顺序,注意不要遗漏东西,枚举 \(d\),那么对于每个 \(x\) 都有 \(\left \lfloor \frac{n}{xd} \right \rfloor\) 个贡献

\[=\sum_{d=1}^{n} \mu(d) (\sum_{x=1}^{n/d} \left \lfloor \frac{n}{dx} \right \rfloor) (\sum_{y=1}^{m/d}\left \lfloor \frac{m}{dy} \right \rfloor) \]

要对一般且重复的柿子敏感,\(\left \lfloor \frac{n}{dx} \right \rfloor=\left \lfloor \frac{\left \lfloor \frac{n}{d} \right \rfloor}{x} \right \rfloor\)

不妨设:

\[f(T)=\sum_{x=1}^{T} \left \lfloor \frac{T}{x} \right \rfloor \]

则原式变为:

\[\sum_{d=1}^{n} \mu(d) f(\left \lfloor \frac{n}{d} \right \rfloor) f(\left \lfloor \frac{m}{d} \right \rfloor) \]

考虑预处理出 \(f\)\(\sqrt{n}\) 整除分块。

还有个问题:\(f\) 如何预处理?

显然那玩意还是珂以单次整除分块的。。。

P1829 [国家集训队]Crash的数字表格 / JZPTAB

\[\sum_{i=1}^{n} \sum_{j=1}^{m} \operatorname{lcm}(i, j) \]

记住 \(\operatorname{lcm}(i, j)=\gcd(i, j) \times \frac{i}{\gcd(i, j)} \times \frac{j}{\gcd(i, j)}\),枚举 \(\gcd\),再分别枚举 \(\frac{i}{\gcd(i, j)},\frac{j}{\gcd(i, j)}\)

\[=\sum_{d=1}^{n}d \sum_{i=1}^{n/d}\sum_{j=1}^{m/d} [\gcd(i, j)] i j \]

\[=\sum_{d=1}^{n}d \sum_{i=1}^{n/d}\sum_{j=1}^{m/d} i j \sum_{d'|\gcd(i, j)} \mu(d') \]

\[=\sum_{d=1}^{n}d\sum_{d'=1}^{n/d} \mu(d') \sum^{n/d}_{d' |i} i \sum^{m/d}_{d' | j} j \]

\[=\sum_{d=1}^{n}d\sum_{d'=1}^{n/d} \mu(d') \sum^{n/d}id' \sum^{m/d} jd' \]

\[=\sum_{d=1}^{n}d\sum_{d'=1}^{n/d} d'^2\mu(d') \sum^{n/d}i \sum^{m/d} j \]

显然后面那两个 \(\sum\) 就是两次等差数列求和,记为 \(f(k, p)=\frac{k(k+1)}{2}\frac{p(p+1)}{2}\),代入:

\[=\sum_{d=1}^{n}d\sum_{d'=1}^{n/d} d'^2\mu(d') f(n/dd', m/dd') \]

\(T=dd'\),重新枚举

\[=\sum_{T=1}^{n} f(n/T, m/T) \sum_{d|T} d \mu(\frac{T}{d})\times (\frac{T}{d})^2 \]

后面那玩意实在太屎,转化一下:

\[\sum_{d|T}\mu(d)d^2 \times\frac{T}{d}=T\sum_{d|T} \mu(d)d \]

发现这个形式不太好做,回到上两行。

\(g(n, m)=\sum_{d=1}^{n} d^2 \mu(d) f(n/d, m/d)\),则答案为:

\[\sum_{d=1}^{n} d \times g(n/d, m/d) \]

首先看 \(g\),这玩意珂以预处理前缀和 + 数论分块做吧?然后再看答案式,还是一个数论分块!

连套两层,复杂度 \(O(T(n+m))\)


更多技巧珂以在 P5518 看到。

更广泛的用处

当然不是爆算 sb gcd 了。

我们知道狄利克雷卷积的一般形式是

\[h(n)=\sum_{d|n} f(d) g(\frac{n}{d}) \]

假设我们有函数 \(g =f * 1\)

如果我们能快速得到 \(g\),珂以用 \(\mu\) 的性质反推除 \(f\)

\[f=\mu * g \Leftrightarrow f(n)=\sum_{d|n} \mu(d) g(\frac{n}{d)} \]

这是广义上的莫比乌斯反演(不单单只用一个结论)

但实际上,它还有另外一个形式:

\[g(n)=\sum_{n|d} f(n) \Leftrightarrow f(n) =\sum_{n|d} g(d) \mu(\frac{d}{n}) \]

这真是离谱他妈给离谱开门 —— 离谱到家了!

证明:类似于二项式反演,直接暴力代入

\[\sum_{n|d} g(d) \mu(\frac{d}{n})=\sum_{d} \mu(d) g(dn)=\sum_d \mu(d) \sum_{nd|t} f(t) \]

\[=\sum_{n|t} f(t)\sum_{d|\frac{t}{n}}\mu(d) \]

然后你发现后面那个柿子终于正常了点,当 \(t/n=1\)\(t=n\) 时有贡献 \(1\),所以这整条柿子为 \(f(n)\),证毕。

看道例题,CF1097F

我超,好爽,\(\mod 2\)?bitset!gcd?莫反!

然后你发现啥都不能用复杂度飞天。

但是操作 4 我们几乎不耗时间,怎么办?平衡复杂度!

令集合 \(L_{i, j}\) 为第 \(i\) 个集合中 \(j\) 的出现次数,这对于其他操作显然不好做,那么令 \(R_{i, j}\) 为第 \(i\) 个集合中 \(j\)倍数出现次数呢?操作 2,就是两个 \(R\) 异或起来(因为并完后若奇偶性相同 mod 2 为 0),而操作 3,仔细品读一下,

\[R_{C, d}=\sum \sum L_{A, i} \times L_{B, j} [d|\gcd(i, j)] \]

\([d|\gcd(i, j)]\) 的充分必要条件为 $[d|i], and, [d|j] $ 于是有,

\[R_{C, d}=\sum L_{A, i} [d|i]\sum L_{B, j} [d|j]=R_{A, i} \times R_{B, i} \]

这就是 与 运算。

对于操作 1,值域很小,直接预处理 + bitset 暴力赋值即可。

问题来了 \(4\) 怎么做?

\[R_{i, j}=\sum_{j|d} L_{i, d} \Leftrightarrow L_{i, j} =\sum_{j|d} R_{i, d} \times \mu(\frac{d}{j}) \]

我们记 \(q(j, d)=[j|d] \times \mu(\frac{d}{j})\),则所求为 \(\sum R_{i, d} \times q_{j, d}\),与完后用 bitset 自带的 count() 即可。

众所周知,\(O(n)\) 筛是最慢的(

杜教筛

球一类积性函数前缀和

我们尝试构造两个函数 \(h, g\) (是不是积性的不怎么重要,只要它能快速求前缀和就好),满足 \(f * g =h\)

记前缀和 \(Sum_f(n)\) 为函数 \(f\) 的前缀和,即 \(\sum_{i=1}^{n} f(i)\)

那么,我们从 \(Sum_h(n)\) 开始推导:

\[Sum_h(n)=\sum_{i=1}^n h(i)=\sum_{i=1}^n \sum_{d|i}g(d) f(\frac{i}{d}) \]

\[=\sum_{d=1}^n g(d) \sum_{i=1}^{n/d} f(i)=\sum_{d=1}^n g(d)\times Sum_f(n/d) \]

我们得到了酱紫一个柿子:

\[Sum_h(n)=\sum_{d=1}^n g(d)\times Sum_f(n/d) \]

现在整点活,将枚举域拆成 \([1,1]\)\([2, n]\)

\[Sum_h(n)=g(1) \times Sum_f(n)+\sum_{d=2}^n g(d)\times Sum_f(n/d) \]

可以看到,我们要求的东西出现了!原来要求什么来着

移项后得:

\[Sum_f(n)=\frac{Sum_h(n)-\sum_{d=2}^n g(d)\times Sum_f(n/d)}{g(1)} \]

假设 \(Sum_h , Sum_g\) 珂以 \(O(1)\) 求,那么对于 \(\sum\) 我们进行迭代 + 数论分块求。

复杂度分析

设其复杂度为 \(T(n)\),那么有:

\[T(n)=\sum_{i=1}^{\sqrt{n}} O(\sqrt{i}+ \sqrt{\frac{n}{i}})=O(n^{0.75}) \]

考虑优化,我们提前筛出 \(Sum_f(1-m)\) 的值,递归到这个区间直接返回,则:

\[T(n)=\sum_{i=1}^{n/m} O(\sqrt{\frac{n}{i}})=O(\frac{n}{\sqrt{m}}) \]

总复杂度为 \(O(m+\frac{n}{\sqrt{m}})\) 平衡一下得 \(m=n^{\frac{2}{3}}\),理论上最优复杂度为 \(O(n^{\frac{2}{3}})\)


其他筛法这个菜鸡不会,请诸位神仙另请高明。

posted @ 2022-01-18 21:41  127_127_127  阅读(99)  评论(0)    收藏  举报