题意
求
\[\sum_{i=1}^a\sum_{j=1}^b\sum_{k=1}^cd(ijk)\]
其中,\(d(i)\) 表示 \(i\) 的约数个数。
\(a, b, c\leq 2000\)
Solution
设
\[f(i)=\sum_{j=1}^a\sum_{k=1}^b[j\times k == i]\]
则
\begin{align} &\sum_{i=1}^a\sum_{j=1}^b\sum_{k=1}^cd(ijk) \\ =&\sum_{i=1}^{ab}f(i)\times \sum_{j=1}^cd(ij) \\ =&\sum_{i=1}^{ab}f(i)\times \sum_{j=1}^c\sum_{u|i}\sum_{v|j}[(u,v)==1] \\ =&\sum_{u=1}^{ab}\sum_{v=1}^c[(u,v)==1]\sum_{u|i}^{ab}\times f(i)\times \lfloor \frac{c}{v}\rfloor \\ =&\sum_{u=1}^{ab}\sum_{d|u}\mu(d)\times \sum_{d|v}\lfloor \frac{c}{v}\rfloor\times \sum_{u|i}^{ab}\times f(i) \\ \end{align}然后我们发现全部都可以预处理出来!!!
因为这些枚举倍数的部分都是独立的,而且单单枚举倍数是可以做到\(O(n\log n)\)的。
所以时间复杂度就为\(O(ab\log ab)\)了,要卡常!
Code
|
|