洛谷 P4240 毒瘤之神的考验

洛谷 P4240 毒瘤之神的考验

题目简述

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

答案对 \(998244353\) 取模.

推导过程

默认本文中出现的 \(p\) 均为质数. 不妨设 \(n\leq m\).

首先,需要证明

\[\varphi(ab)=\frac{\varphi(a)\varphi(b)\gcd(a,b)}{\varphi\bigl(\gcd(a,b)\bigr)} \]

\[a=\prod_p p^{\alpha_i},\;b=\prod_p p^{\beta_i} \]

已知

\[\varphi(n)=n\cdot\prod_{p|n}\left(1-\frac{1}{p}\right) \]

\[\varphi(ab)=ab\cdot\prod_{p|ab}\left(1-\frac{1}{p}\right) \]

\[\begin{align*} \frac{\varphi(a)\varphi(b)\gcd(a,b)}{\varphi\bigl(\gcd(a,b)\bigr)}&=\frac{a\cdot\prod_{p|a}\bigl(1-\frac{1}{p}\bigr)\cdot b\cdot\prod_{p|b}\bigl(1-\frac{1}{p}\bigr)\cdot\gcd(a,b)}{\gcd(a,b)\cdot\prod_{p|\gcd(a,b)}\bigl(1-\frac{1}{p}\bigr)} \\ &=ab\cdot\frac{\prod_{p|a}\bigl(1-\frac{1}{p}\bigr)\cdot\prod_{p|b}\bigl(1-\frac{1}{p}\bigr)}{\prod_{p|\gcd(a,b)}\bigl(1-\frac{1}{p}\bigr)} \end{align*} \]

\(A=\{p:p\mid a\},\,B=\{p:p\mid b\}\),则 \(A\cup B=\{p:p\mid ab\},\,A\cap B=\bigl\{p:p\mid\gcd(a,b)\bigr\}\).

\[\begin{align*} &ab\cdot\frac{\prod_{p|a}\bigl(1-\frac{1}{p}\bigr)\cdot\prod_{p|b}\bigl(1-\frac{1}{p}\bigr)}{\prod_{p|\gcd(a,b)}\bigl(1-\frac{1}{p}\bigr)} \\ =\space&ab\cdot\frac{\prod_{p\in A}\bigl(1-\frac{1}{p}\bigr)\cdot\prod_{p\in B}\bigl(1-\frac{1}{p}\bigr)}{\prod_{p\in A\cap B}\bigl(1-\frac{1}{p}\bigr)} \\ =\space&ab\cdot\prod_{p\in A\cup B}\left(1-\frac{1}{p}\right) \\ =\space&ab\cdot\prod_{p|ab}\left(1-\frac{1}{p}\right) \end{align*} \]

因此

\[\varphi(ab)=\frac{\varphi(a)\varphi(b)\gcd(a,b)}{\varphi\bigl(\gcd(a,b)\bigr)} \]

于是,

\[\begin{align*} &\sum_{i=1}^n\sum_{j=1}^m\varphi(ij) \\ =&\sum_{i=1}^n\sum_{j=1}^m\frac{\varphi(i)\varphi(j)\gcd(i,j)}{\varphi\bigl(\gcd(i,j)\bigr)} \\ =&\sum_{i=1}^n\sum_{j=1}^m\sum_{d=1}^n\left(\bigl[\gcd(i,j)=d\bigr]\cdot\frac{\varphi(i)\varphi(j)d}{\varphi(d)}\right) \\ =&\sum_{d=1}^n\left(\frac{d}{\varphi(d)}\cdot\sum_{i=1}^n\sum_{j=1}^m\biggl(\bigl[\gcd(i,j)=d\bigr]\cdot\varphi(i)\varphi(j)\biggr)\right) \\ =&\sum_{d=1}^n\left(\frac{d}{\varphi(d)}\cdot\sum_{i=1}^{\lfloor n/d\rfloor}\sum_{j=1}^{\lfloor m/d\rfloor}\biggl(\bigl[\gcd(di,dj)=d\bigr]\cdot\varphi(di)\varphi(dj)\biggr)\right) \\ =&\sum_{d=1}^n\left(\frac{d}{\varphi(d)}\cdot\sum_{i=1}^{\lfloor n/d\rfloor}\sum_{j=1}^{\lfloor m/d\rfloor}\biggl(\bigl[\gcd(i,j)=1\bigr]\cdot\varphi(di)\varphi(dj)\biggr)\right) \\ =&\sum_{d=1}^n\left(\frac{d}{\varphi(d)}\cdot\sum_{i=1}^{\lfloor n/d\rfloor}\sum_{j=1}^{\lfloor m/d\rfloor}\biggl(\varphi(di)\varphi(dj)\cdot\sum_{x|i,\,x|j}\mu(x)\biggr)\right) \\ =&\sum_{d=1}^n\left(\frac{d}{\varphi(d)}\cdot\sum_{x=1}^{\lfloor n/d\rfloor}\left(\mu(x)\cdot\sum_{i=1}^{\lfloor\frac{n}{dx}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{dx}\rfloor}\varphi(dx\!\cdot\!i)\varphi(dx\!\cdot\!j)\right)\right) \\ =&\sum_{d=1}^n\left(\frac{d}{\varphi(d)}\cdot\sum_{x=1}^{\lfloor n/d\rfloor}\left(\mu(x)\cdot\sum_{i=1}^{\lfloor\frac{n}{dx}\rfloor}\varphi(dx\!\cdot\!i)\cdot\sum_{j=1}^{\lfloor\frac{m}{dx}\rfloor}\varphi(dx\!\cdot\!j)\right)\right) \end{align*} \]

\(T=dx\),则 \(x=\frac{T}{d}\)

\[\begin{align*} &\sum_{d=1}^n\left(\frac{d}{\varphi(d)}\cdot\sum_{x=1}^{\lfloor n/d\rfloor}\left(\mu(x)\cdot\sum_{i=1}^{\lfloor\frac{n}{dx}\rfloor}\varphi(dx\!\cdot\!i)\cdot\sum_{j=1}^{\lfloor\frac{m}{dx}\rfloor}\varphi(dx\!\cdot\!j)\right)\right) \\ =&\sum_{T=1}^n\sum_{d|T}\left(\frac{d\cdot\mu\!\left(\frac{T}{d}\right)}{\varphi(d)}\cdot\sum_{i=1}^{\lfloor n/T\rfloor}\varphi(T\!\cdot\!i)\cdot\sum_{j=1}^{\lfloor m/T\rfloor}\varphi(T\!\cdot\!j)\right) \\ =&\sum_{T=1}^n\left(\sum_{i=1}^{\lfloor n/T\rfloor}\varphi(T\!\cdot\!i)\cdot\sum_{j=1}^{\lfloor m/T\rfloor}\varphi(T\!\cdot\!j)\cdot\sum_{d|T}\frac{d\cdot\mu\!\left(\frac{T}{d}\right)}{\varphi(d)}\right) \end{align*} \]

多组查询的优化思路

对于多组测试数据,直接按上面的式子枚举所有 \(T\) 仍然会很慢。注意到

\[\left\lfloor\frac{n}{T}\right\rfloor, \quad \left\lfloor\frac{m}{T}\right\rfloor \]

只有在 \(T\) 变化时才会“少量改变”,所以可以把枚举分成若干段。设当前段内

\[\left\lfloor\frac{n}{T}\right\rfloor = a, \qquad \left\lfloor\frac{m}{T}\right\rfloor = b, \]

则这一段内的贡献可以整体合并为

\[\left(\sum_{T=l}^{r}\alpha(T)\right)\cdot F(a)\cdot F(b), \]

其中

\[F(x)=\sum_{k=1}^{x}\varphi(k), \qquad \alpha(T)=\sum_{d\mid T}\frac{d\mu(T/d)}{\varphi(d)}. \]

这样就把原来每个 \(T\) 单独处理,变成了“分段处理”,从而适用于 \(T\leq 10^4\)\(n,m\leq 10^5\) 的多组查询.

预处理时,先用线性筛求出 \(\varphi(1),\dots,\varphi(N)\),再得到前缀和 \(F(x)\),最后对每个查询按上面的分段方式计算答案即可.

posted on 2026-07-14 20:19  吴一鸣  阅读(0)  评论(0)    收藏  举报

导航