简单的数学题,真是简单。
题目
自己推得比较复杂,但还是推出来了。这里讲个更简洁的做法。
\(\sum_{i=1}^n \sum_{j=1}^n ij\gcd(i,j)\)
\(=\sum_{i=1}^n \sum_{j=1}^n ij\sum_{d|i,d|j} \phi(d)\) //注意这一步
\(=\sum_{d=1}^n \phi(d)\sum_{d|i}\sum_{d|j}ij\)
\(=\sum_{d=1}^n \phi(d)d^2(\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}i)^2\)
后面这个 \((\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}i)^2\) 显然可以 \(O(1)\) 求出。
而这个 \(\sum\phi(x)x^2\) 可以杜教筛。
怎么杜教筛?
取 \(g(x)=x^2\),则 \(f\circ g=x^3\)。
而:
\(\sum_{i=1}^n x=\frac{n(n+1)}{2}\);
\(\sum_{i=1}^n x^2=\frac{n(n+1)(2n+1)}{6}\);
\(\sum_{i=1}^n x^3=(\frac{n(n+1)}{2})^2\)。
除法分块即可。容易证明,复杂度为 \(O(n^{\frac{2}{3}})\)。
NOI2010 能量采集(题目)也可以这样做,更简单。
#include
#include