基本函数不介绍了,这篇纯属给自己复习用的。
莫比乌斯/欧拉 反演
\[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}})\)。
其他筛法这个菜鸡不会,请诸位神仙另请高明。