【Nowcoder 7608B】 牛半仙的妹子
题目大意:
求:
\[\sum_{i=1}^n\sum_{j=1}^n\sum_{k=1}^n\gcd(i,j,k)
\]
正文:
本题有两种方法,第一种方法用莫比乌斯反演,第二种方法是用到欧拉函数。
方法一:
可以枚举这个最大公约数来化简这个式子:
\[\begin{aligned}\sum_{i=1}^n\sum_{j=1}^n\sum_{k=1}^n\gcd(i,j,k)&=\sum_{d=1}^{n}\sum_{i=1}^n\sum_{j=1}^n\sum_{k=1}^n\left[\gcd(i,j,k)==d\right]d\\&=\sum_{d=1}^{n}d\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{k=1}^{\lfloor\frac{n}{d}\rfloor}\left[\gcd(i,j,k)==1\right]\\&=\sum_{d=1}^{n}d\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{k=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{l|\gcd(i,j,k)}\mu(l)\\&=\sum_{d=1}^{n}d\sum_{l=1}^{\lfloor\frac{n}{d}\rfloor}\mu(l)\sum_{i|l}^{\lfloor\frac{n}{d}\rfloor}\sum_{j|l}^{\lfloor\frac{n}{d}\rfloor}\sum_{k|l}^{\lfloor\frac{n}{d}\rfloor}1\\&=\sum_{d=1}^{n}d\sum_{l=1}^{\lfloor\frac{n}{d}\rfloor}\mu(l)\left\lfloor\frac{n}{dl}\right\rfloor^3\end{aligned}
\]
然后就可以 \(O(n\sqrt{n})\) 做了,虽然还有更优的做法,但这里不作介绍。
方法二:
欧拉函数更简单还更快。首先有 \(\sum_{d|n}\varphi(d)=n\),那么代入式子:
\[\begin{aligned}\sum_{i=1}^n\sum_{j=1}^n\sum_{k=1}^n\gcd(i,j,k)&=\sum_{i=1}^n\sum_{j=1}^n\sum_{k=1}^n\sum_{d|\gcd(i,j,k)}\varphi(d)\\&=\sum_{d=1}^{n}\varphi(d)\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{k=1}^{\lfloor\frac{n}{d}\rfloor}1\\&=\sum_{d|\gcd(i,j,k)}\varphi(d)\left\lfloor\frac{n}{d}\right\rfloor^3\end{aligned}
\]
核心代码时间复杂度 \(O(\sqrt{n})\)。