2022.11.19 鲜花
SoyTony 给我一道题:
(约定:\(f^k(x)=f(x)^k\))
求
\[\sum_{i=1}^n\sum_{j=1}^m\mu^2(\gcd(i,j)) \]\(1\le n,m\le 10^7\) .
数据范围是我编的,我其实并不知道 LOJ 上数据范围到底是多少 .
首先不妨令 \(n\le m\),根据经典莫反套路可以得到答案其实就是
然后整除分块,问题变成如何快速求 \(\mu*\mu^2\) .
Algorithm 1(时空复杂度 \(\Theta(n)\))
注意到 \(\mu*\mu^2\) 是积性函数,于是线性筛即可 \(\Theta(n)\) .
Algorithm 2(时空复杂度 \(\Theta(\sqrt n)\))
SoyTony 是大智者
首先要求的就是
注意到 \(n\) 只能形如 \(p^2q\),其中 \(p\perp q\),否则答案必然是 \(0\) .
于是显然 \(p^2\) 分别给两个 \(\mu\) 否则没有贡献,于是答案就变成
因为 \(\mu^2\) 显然是完全积性函数,而 \(p\perp d\),于是可以拆开变成
然而 \(\mu^3\) 就是 \(\mu\),右边 \(\mu^2\left(\dfrac qd\right)\) 因为 \(\dfrac qd\) 是 square-free 的所以必然等于 \(1\),于是又可以变成
这样这个求和就是一个非常平凡的莫反 \(\mu*1=\varepsilon\) .
则答案就是 \(\mu(p)[q=1]\) .
如果 \(q=1\) 则必然 \(n=p^2\),于是答案也可以转写为 \(\mu(\sqrt n)[\sqrt n\in\Z]\) .
这样做一个根号值域的线性筛 \(\mu\) 即可 . 时空复杂度 \(\Theta(n)\) .
Algorithm 3(时空复杂度 \(\Theta(\sqrt n)\))
SoyTony 曾言道:“有没有什么组合意义做法。”
考虑 \(\mu^2*\mu\) 其实就是 \(\mu^2\) 的 Dirichlet 卷积逆,也就是我们要找到一个函数 \(f\),使得 \(f*1=\mu^2\) .
然后接下来的步骤我发现其实就是 Algorithm 4 的神奇公式 \(\displaystyle\mu^2(x)=\sum_{d^2|x}\mu(d)\) .
然后这样也能得到 \((\mu*\mu^2)(n)\) 是 \(\mu(\sqrt n)[\sqrt n\in\Z]\),后面同 Algorithm 2 .
Algorithm 4(时空复杂度 \(\Theta(\sqrt n)\))
有神奇公式 \(\displaystyle\mu^2(x)=\sum_{d^2|x}\mu(d)\),证明略 .
于是直接从原题入手,
那么直接线性筛算就好了,时空复杂度仍然是 \(\Theta(\sqrt n)\) .
以下是博客签名,正文无关
本文来自博客园,作者:Jijidawang,转载请注明原文链接:https://www.cnblogs.com/CDOI-24374/p/16906959.html
版权声明:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议(CC BY-NC-SA 4.0)进行许可。看完如果觉得有用请点个赞吧 QwQ