莫反能写学习笔记吗?似乎不能。
那记一下我做的莫反题吧。
P2522 [HAOI2011] Problem b
对于给出的 \(n\) 个询问,每次求有多少个数对 \((x,y)\),满足 \(a\le x \le b\),\(c \le y \le d\),且 \(\textrm{gcd}(x,y)=k\),\(\textrm{gcd}(x,y)\) 函数为 \(x\) 和 \(y\) 的最大公约数。
可以说是莫反最基础的题了。
首先列出式子:
\[\sum_{i=a}^{b}\sum_{j=c}^{d}[\textrm{gcd}(i,j)=k]
\]
这个式子可以容斥,故以下讨论:
\[\sum_{i=1}^{n}\sum_{j=1}^{m}[\textrm{gcd}(i,j)=k]
\]
把 \(k\) 提出来:
\[\sum_{i=1}^{\lfloor \frac{n}{k}\rfloor }\sum_{j=1}^{\lfloor \frac{m}{k}\rfloor }[\textrm{gcd}(i,j)=1]
\]
后面的 \([\textrm{gcd}(i,j)=1]\) 在莫反中相当典型,因为 \(\mu * 1 = \epsilon\),故 \(\sum_{d\mid n}\mu(d) = \epsilon(n) = [n=1]\),于是可以变成:
\[\sum_{i=1}^{\lfloor \frac{n}{k}\rfloor }\sum_{j=1}^{\lfloor \frac{m}{k}\rfloor }\sum_{d \mid \textrm{gcd}(i,j)}\mu(d)
\]
我们转而枚举 \(d\),为了方便,接下来默认 \(n<m\):
\[\sum_{d=1}^{\lfloor \frac{n}{k}\rfloor}\sum_{i=1}^{\lfloor \frac{n}{kd}\rfloor}\sum_{j=1}^{\lfloor \frac{m}{kd}\rfloor}\mu(d)
\]
可以发现枚举的 \(i,j\) 没有用:
\[\sum_{d=1}^{\lfloor \frac{n}{k}\rfloor}\mu(d)\lfloor \frac{n}{kd}\rfloor\lfloor \frac{m}{kd}\rfloor
\]
后面的两个分式可以整除分块,而 \(\mu\) 函数的前缀和用线性筛求出,即可 \(O(\sqrt n)\)。
P3704 [SDOI2017] 数字表格
Doris 用老师的超级计算机生成了一个 \(n\times m\) 的表格,
第 \(i\) 行第 \(j\) 列的格子中的数是 \(f_{\gcd(i,j)}\),其中 \(\gcd(i,j)\) 表示 \(i,j\) 的最大公约数。
Doris 的表格中共有 \(n\times m\) 个数,她想知道这些数的乘积是多少。
答案对 \(10^9+7\) 取模。
列出式子:
\[\prod_{i=1}^{n}\prod_{j=1}^{m}f_{\textrm{gcd}(i,j)}
\]
依旧枚举 \(\textrm{gcd}\):
\[\prod_{k=1}^{n}f_k^{\sum_{i=1}^{\lfloor \frac{n}{k}\rfloor}\sum_{j=1}^{\lfloor \frac{m}{k}\rfloor}[\textrm{gcd}(i,j)=1]}
\]
\[=\prod_{k=1}^{n}f_k^{\sum_{d=1}^{\lfloor \frac{n}{k}\rfloor}\sum_{i=1}^{\lfloor \frac{n}{kd}\rfloor}\sum_{j=1}^{\lfloor \frac{m}{kd}\rfloor}\mu(d)}
\]
\[=\prod_{k=1}^{n}f_k^{\sum_{d=1}^{\lfloor \frac{n}{k}\rfloor}\mu(d)\lfloor \frac{n}{kd}\rfloor\lfloor \frac{m}{kd}\rfloor}
\]
把 \(kd\) 作为整体 \(T\):
\[=\prod_{T=1}^{n}(\prod_{k\mid T}f_k^{\mu({\frac{T}{k}})})^{\lfloor \frac{n}{T}\rfloor\lfloor \frac{m}{T}\rfloor}
\]
\(\prod_{k\mid T}f_k^{\mu({\frac{T}{k}})}\) 显然可以通过线性筛预处理,而外层的幂次可以数论分块,于是单次查询就是 \(O(\sqrt n)\)。
P4619 [SDOI2018] 旧试题
小 \(Q\) 眉头一皱,感觉事情不妙,于是他找到了你,希望你能教他解决这道题目。小 \(Q\) 依稀记得题目要计算如下表达式的值。
\[(\sum_{i=1}^{A}\sum_{j=1}^{B}\sum_{k=1}^{C}d(ijk))\bmod (10^9+7)
\]
其中 \(d(ijk)\) 表示 \(i × j × k\) 的约数个数。
首先考虑 \(d(ijk)\) 的形式,我们枚举:
\[\sum_{i=1}^{A}\sum_{j=1}^{B}\sum_{k=1}^{C}\sum_{x\mid i}\sum_{y\mid j}\sum_{z\mid k}\epsilon(\textrm{gcd}(x,y))\epsilon(\textrm{gcd}(y,z))\epsilon(\textrm{gcd}(x,z))
\]
至于为什么可以这么枚举,考虑到 \(d\) 是一个积性函数,也就是说我们只需要考虑 \(d(p^k)\) 是否满足即可,而其显然满足,故成立。
我们接着对上式变换:
\[\sum_{x=1}^{A}\sum_{i=1}^{\lfloor\frac{A}{x}\rfloor}\sum_{y=1}^{B}\sum_{j=1}^{\lfloor\frac{B}{y}\rfloor}\sum_{z=1}^{C}\sum_{k=1}^{\lfloor\frac{C}{z}\rfloor}\epsilon(\textrm{gcd}(x,y))\epsilon(\textrm{gcd}(y,z))\epsilon(\textrm{gcd}(x,z))
\]
发现 \(i,j,k\) 没用了,其求和可以直接求得。我们接下来用莫反套路解决 \(\epsilon\):
\[\sum_{x=1}^{A}\lfloor\frac{A}{x}\rfloor\sum_{y=1}^{B}\lfloor\frac{B}{y}\rfloor\sum_{z=1}^{C}\lfloor\frac{C}{z}\rfloor\sum_{i\mid \textrm{gcd}(x,y)}\mu(i)\sum_{j\mid \textrm{gcd}(y,z)}\mu(j)\sum_{k\mid \textrm{gcd}(x,z)}\mu(k)
\]
接下来把 \(i,j,k\) 换到前面:
\[\sum_{i=1}^{min(A,B)}\sum_{j=1}^{min(B,C)}\sum_{k=1}^{min(A,C)}\mu(i)\mu(j)\mu(k)\sum_{\textrm{lcm}(i,j)\mid x}\lfloor\frac{A}{x}\rfloor\sum_{\textrm{lcm}(j,k)\mid y}\lfloor\frac{B}{y}\rfloor\sum_{\textrm{lcm}(i,k)\mid z}\lfloor\frac{C}{z}\rfloor
\]
这个求和依然可以调和级数复杂度预处理。
\[\sum_{i=1}^{min(A,B)}\sum_{j=1}^{min(B,C)}\sum_{k=1}^{min(A,C)}\mu(i)\mu(j)\mu(k)S_A(\textrm{lcm}(i,j))S_B(\textrm{lcm}(j,k))S_C(\textrm{lcm}(i,k))
\]
接下来似乎没有什么好的优化方法。
考虑到很多时候会因为 \(\textrm{lcm}(i,j)>A\) 之类的问题导致 \(S\) 函数值为 \(0\),我们大胆猜测满足条件的不同的 \(i,j,k\) 不会太多(也可以打表发现)。
由于 \(\textrm{lcm}(i,j)>\textrm{max}(A,\textrm{max}(B,C))\) 时 \(i,j\) 不可能产生贡献,于是我们在 \(\textrm{lcm}(i,j)\le\textrm{max}(A,\textrm{max}(B,C))\) 时,在 \(i,j\) 之间连一条边。
最后统计 \(i,j,k\) 便变成了无向图三元环统计(记得计算\(i,j,k\) 中有数相同的情况),三元环统计根号分治即可。
P3768 简单的数学题
输入一个整数 \(n\) 和一个整数 \(p\),你需要求出:
\[\left(\sum_{i=1}^n\sum_{j=1}^n ij \gcd(i,j)\right) \bmod p
\]
其中 \(\gcd(a,b)\) 表示 \(a\) 与 \(b\) 的最大公约数。
\(n \leq 10^{10}\)。
我们依旧考虑枚举 \(\textrm{gcd}\)。
\[\sum_{d=1}^{n}\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{n}{d}\rfloor}d^3ij\epsilon(\textrm{gcd}(i,j))
\]
套路莫反:
\[\sum_{d=1}^{n}d^3\sum_{k=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{i=1}^{\lfloor\frac{n}{kd}\rfloor}\sum_{j=1}^{\lfloor\frac{n}{kd}\rfloor}\mu(k)k^2ij
\]
把式子变好看:
\[\sum_{d=1}^{n}d^3\sum_{k=1}^{\lfloor\frac{n}{d}\rfloor}\mu(k)k^2\sum_{i=1}^{\lfloor\frac{n}{kd}\rfloor}i\sum_{j=1}^{\lfloor\frac{n}{kd}\rfloor}j
\]
发现后面的求和可以 \(O(1)\),记 \(S(x) = \sum_{i=1}^{x}i\):
\[\sum_{d=1}^{n}d^3\sum_{k=1}^{\lfloor\frac{n}{d}\rfloor}\mu(k)k^2(S(\lfloor\frac{n}{kd}\rfloor))^2
\]
考虑设 \(kd\) 为整体 \(T\):
\[\sum_{T=1}^{n}(S(\lfloor\frac{n}{T}\rfloor))^2\sum_{d\mid n}d^3\mu(\frac{T}{d})\frac{T^2}{d^2}
\]
\[=\sum_{T=1}^{n}(S(\lfloor\frac{n}{T}\rfloor))^2T^2\sum_{d\mid n}d\mu(\frac{T}{d})
\]
发现后面的形式是一个狄利克雷卷积,即 \(\textrm{id} * \mu = \varphi\),于是化为:
\[=\sum_{T=1}^{n}(S(\lfloor\frac{n}{T}\rfloor))^2T^2\varphi(T)
\]
这个式子中 \(S\) 函数可以数论分块,接下来我们要求出 \(T^2\varphi(T)\) 的前缀和,设 \(f(x)=x^2\varphi(x)\)。
求前缀和,想到杜教筛,考虑到当 \(g =\textrm{id}_2\) 时 \(f * g =\textrm{id}_3\),这两个函数的前缀和均好求,于是可以使用杜教筛。
P6055 [RC-02] GCD
给出 \(N\),求:
\[\sum_{i=1}^N\sum_{j=1}^N\sum_{p=1}^{\lfloor\frac{N}{j}\rfloor}\sum_{q=1}^{\lfloor\frac{N}{j}\rfloor}[\gcd(i,j)=1][\gcd(p,q)=1]
\]
答案模 \(998244353\)。
发现枚举 \(j\) 相当于枚举 \(p,q\) 的 \(\textrm{gcd}\),于是式子可以变形为:
\[\sum_{i=1}^{N}\sum_{p=1}^{N}\sum_{q=1}^{N}[\mathrm{gcd}(i,p,q)=1]
\]
公式枚举 \(\textrm{gcd}\):
\[\sum_{d=1}^{N}\mu(d)(\lfloor \frac{N}{d}\rfloor)^3
\]
可以发现直接数论分块加杜教筛即可。
P1829 [集训队互测 2010] Crash的数字表格 / JZPTAB
今天的数学课上,Crash 小朋友学习了最小公倍数(Least Common Multiple)。对于两个正整数 a 和 b,lcm(a,b) 表示能同时被 a 和 b 整除的最小正整数。例如,lcm(6,8)=24。
回到家后,Crash 还在想着课上学的东西,为了研究最小公倍数,他画了一张 n×m 的表格。每个格子里写了一个数字,其中第 i 行第 j 列的那个格子里写着数为 lcm(i,j)。
看着这个表格,Crash 想到了很多可以思考的问题。不过他最想解决的问题却是一个十分简单的问题:这个表格中所有数的和是多少。当 n 和 m 很大时,Crash 就束手无策了,因此他找到了聪明的你用程序帮他解决这个问题。由于最终结果可能会很大,Crash 只想知道表格里所有数的和对 20101009 取模后的值。
我们列出式子:
\[\sum_{i=1}^{n}\sum_{j=1}^{m}\textrm{lcm}(i,j)
\]
把 \(\textrm{lcm}\) 化开:
\[\sum_{i=1}^{n}\sum_{j=1}^{m}\frac{ij}{\textrm{gcd}(i,j)}
\]
公式枚举 \(\textrm{gcd}\):
\[\sum_{d=1}^{n}d\sum_{i=1}^{\lfloor \frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor \frac{m}{d}\rfloor}[\textrm{gcd}(i,j)=1]
\]
公式莫反:
\[\sum_{d=1}^{n}d\sum_{k=1}^{\lfloor \frac{n}{d}\rfloor}\sum_{i=1}^{\lfloor \frac{n}{kd}\rfloor}\sum_{j=1}^{\lfloor \frac{m}{kd}\rfloor}\mu(k)k^2
\]
我们记 \(S(x)=\sum_{i=1}^{x}i\) 显然 \(S(x)\) 可以 \(O(1)\) 求解。
\[\sum_{d=1}^{n}d\sum_{k=1}^{\lfloor \frac{n}{d}\rfloor}\mu(k)k^2S(\lfloor \frac{n}{kd}\rfloor)S(\lfloor \frac{m}{kd}\rfloor)
\]
显然两个数论分块即可,里面的 \(\mu(k)k^2\) 可以预处理。
P7504 「HMOI R1」可爱的德丽莎
可爱的德丽莎希望你能帮她求出
\[\sum_{x = 1}^n\sum_{y = 1}^n\sum_{i = 1}^x[x \bot k_1][i \bot x]\cdot i\cdot \sum_{j = 1}^y[y \bot k_2][j \bot y]\cdot j
\]
的结果。
其中 \([x \bot y] = \begin{cases}1 & \operatorname{gcd}(x,y)=1 \\ 0 & \operatorname{gcd}(x,y)\neq 1\end{cases}\)
德丽莎这么可爱,你怎么能不答应她呢?
由于答案可能很大,所以德丽莎只想知道它对 \(998244353\) 取模后的结果。
我的题解
先化式子。
\[\sum_{x = 1}^n\sum_{y = 1}^n\sum_{i = 1}^x[x \bot k_1][i \bot x]\cdot i\cdot \sum_{j = 1}^y[y \bot k_2][j \bot y]\cdot j
\]
\[=\sum_{x = 1}^n[x \bot k_1]\sum_{i = 1}^x[i \bot x]\cdot i\cdot\sum_{y = 1}^n [y \bot k_2]\sum_{j = 1}^y[j \bot y]\cdot j
\]
可以发现左右两个式子是相同的,我们讨论其中一个。
\[\sum_{x = 1}^n[x \bot k_1]\sum_{i = 1}^x[i \bot x]\cdot i
\]
看到 \([i \bot x]\) 套路的上莫比乌斯反演。
\[=\sum_{x = 1}^n[x \bot k_1]\sum_{d \mid x}\sum_{i=1}^{ \frac{x}{d} }\mu(d)\cdot i \cdot d
\]
把 \(i\) 单独列出去,发现是个求和,可以消去一个 \(\sum\)。
\[=\frac{1}{2} \sum_{x = 1}^n[x \bot k_1]\sum_{d \mid x}\mu(d)\cdot d \cdot \frac{x}{d}\cdot(\frac{x}{d}+1)
\]
\[=\frac{1}{2} \sum_{x = 1}^n[x \bot k_1]\cdot x \cdot \sum_{d \mid x}\mu(d)\cdot(\frac{x}{d}+1)
\]
发现 \(\sum_{d \mid x}\) 里面一个是 \(\mu * id\) 一个是 \(\mu * 1\),分别是 \(\varphi\) 和 \(\epsilon\)。
\[=\frac{1}{2} \sum_{x = 1}^n[x \bot k_1]\cdot x \cdot (\varphi(x)+\epsilon(x))
\]
把 \(\epsilon\) 拆出来。
\[=\frac{1}{2} (1+\sum_{x = 1}^n[x \bot k_1]\cdot x \cdot \varphi(x))
\]
似乎没什么好化的了,现在变成了一个前缀和的形式,于是我们考虑杜教筛。
发现若 \(g(x)=[x \bot k]\cdot x\),则 \((f * g)(x)=[x \bot k] \cdot x^2\),这个形式看起来很不错。
接下来我们需要求 \(g(x)=[x \bot k] \cdot x\) 的前缀和,列出式子:
\[\sum_{i=1}^{n}[i \bot k] \cdot i
\]
\[=\sum_{i=1}^{n}i\cdot \sum_{d\mid k}\mu (d)
\]
\[=\sum_{d \mid k}\mu(d) \cdot d \cdot \sum_{i=1}^{\lfloor \frac{n}{d} \rfloor}i
\]
发现后面的 \(\sum\) 是一个求和,可消去,前面的 \(\sum\) 想不到啥方法优化,直接枚举 \(k\) 的因数即可。
对于 \(f*g\) 的前缀和,与 \(g\) 的前缀和同理。
于是我们可以在可接受的时间内计算出 \(g\) 和 \(f*g\) 的前缀和,接下来杜教筛求出 \(f\) 的前缀和即可。