【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})\)

posted @ 2020-10-25 16:59  Jayun  阅读(125)  评论(0编辑  收藏  举报