2022.11.19 鲜花

SoyTony 给我一道题:

(约定:\(f^k(x)=f(x)^k\)

LOJ528 「LibreOJ β Round #4」求和

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

\(1\le n,m\le 10^7\) .

数据范围是我编的,我其实并不知道 LOJ 上数据范围到底是多少 .

首先不妨令 \(n\le m\),根据经典莫反套路可以得到答案其实就是

\[\sum_{i=1}^n\left\lfloor\dfrac ni\right\rfloor\left\lfloor\dfrac mi\right\rfloor(\mu*\mu^2)(i) \]

然后整除分块,问题变成如何快速求 \(\mu*\mu^2\) .

Algorithm 1(时空复杂度 \(\Theta(n)\)

注意到 \(\mu*\mu^2\) 是积性函数,于是线性筛即可 \(\Theta(n)\) .

Algorithm 2(时空复杂度 \(\Theta(\sqrt n)\)

SoyTony 是大智者

首先要求的就是

\[\sum_{d\mid n}\mu(d)\mu^2\left(\dfrac nd\right) \]

注意到 \(n\) 只能形如 \(p^2q\),其中 \(p\perp q\),否则答案必然是 \(0\) .

于是显然 \(p^2\) 分别给两个 \(\mu\) 否则没有贡献,于是答案就变成

\[\sum_{d\mid q}\mu(pd)\mu^2\left(\dfrac{pq}d\right) \]

因为 \(\mu^2\) 显然是完全积性函数,而 \(p\perp d\),于是可以拆开变成

\[\mu^3(p)\sum_{d\mid q}\mu(d)\mu^2\left(\dfrac qd\right) \]

然而 \(\mu^3\) 就是 \(\mu\),右边 \(\mu^2\left(\dfrac qd\right)\) 因为 \(\dfrac qd\) 是 square-free 的所以必然等于 \(1\),于是又可以变成

\[\mu(p)\sum_{d\mid q}\mu(d) \]

这样这个求和就是一个非常平凡的莫反 \(\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)\),证明略 .

于是直接从原题入手,

\[\begin{aligned}\sum_{i=1}^n\sum_{j=1}^m\mu^2(\gcd(i,j))&=\sum_{i=1}^n\sum_{j=1}^m\sum_{d^2|\gcd(i,j)}\mu(d)\\&=\sum_{d=1}^{\sqrt n}\left\lfloor\dfrac n{d^2}\right\rfloor\left\lfloor\dfrac m{d^2}\right\rfloor\mu(d)\end{aligned} \]

那么直接线性筛算就好了,时空复杂度仍然是 \(\Theta(\sqrt n)\) .

posted @ 2022-11-19 20:26  Jijidawang  阅读(74)  评论(5编辑  收藏  举报
😅​