题目 2135 [SDOI 2015] 约数个数和
2019-09-15 00:22:04
|
|
题目 2135 [SDOI 2015] 约数个数和
2019-08-30 19:26:30
|
|
|
|
交一发惨WA最终发现是线性筛写错了。。
如何提高智商? ==== 分割线 ==== 求$\sum_{i=1}^{n} \sum_{j=1}^{m} d(ij) $, $d(x)$ 为x的约数的个数。 假设$n<m$,不满足可以swap(n, m)不影响答案 首先 $d(nm) = \sum_{i|n} \sum_{j|m} [gcd(i,j) = 1]$ 证明方法大致如下: 首先,若 $x = p_{1}^{k_{1}}p_{2}^{k_{2}}..p_{s}^{k_{s}}$ 根据乘法原理则有$d(x) = (k_{1}+1)(k_{2}+1)...(k_{s}+1)$ 考虑$d(nm)$,分解 $n = p_{1}^{a_{1}}p_{2}^{a_{2}}..p_{s}^{a_{s}}$ (指数可以为0,也就是不存在此因子) $m = p_{1}^{b_{1}}p_{2}^{b_{2}}..p_{s}^{b_{s}}$ 根据乘法原理 $d(nm) = (1+a_{1}+b_{1})(1+a_{2}+b_{2})..(1+a_{s}+b_{s})$ 同时,我们容易发现,对于一个质因子$p_{k}$,并存在两个数u, v。使得 $gcd(u*p_{k}^{a_{k}}, v) = gcd(u*p_{k}^{a_{k}-1}, v) = .. = gcd(u, v) = ... = gcd(u, v*p_{k}^{b_{k}-1}) = gcd(u, v*p_{k}^{b_{k}}) = 1$ 共 $a_{k}+b_{k}+1$ 对这样的数对 那么总共有s个质因子,则 $\prod_{k=1}^{s} (a_{k}+b_{k}+1) $刚好等于$d(nm)$,证明完毕。 所以 $ans = \sum_{i=1}^{n} \sum_{j=1}^{m} d(ij) $ $ = \sum_{i=1}^{n} \sum_{j=1}^{m} \sum_{i|n} \sum_{j|m} [gcd(i,j) = 1] $ $ = \sum_{i=1}^{n} \sum_{j=1}^{m} \lfloor \frac{n}{i} \rfloor \lfloor \frac{m}{j} \rfloor [gcd(i, j) = 1]$ $ = \sum_{d=1}^{n} \mu(d) (\sum_{i=1}^{\lfloor \frac{n}{d} \rfloor} \sum_{j=1}^{\lfloor \frac{m}{d} \rfloor} \lfloor \frac{n}{id} \rfloor \lfloor \frac{m}{jd} \rfloor) $ $ = \sum_{d=1}^{n} \mu(d) (\sum_{i=1}^{\lfloor \frac{n}{d} \rfloor} \lfloor \frac{\lfloor \frac{n}{d} \rfloor}{i}\rfloor\sum_{j=1}^{\lfloor \frac{m}{d} \rfloor}\lfloor \frac{\lfloor \frac{m}{d} \rfloor}{j}\rfloor) $ 于是发现$\sum_{ }^{ } \mu(d)$这部分可以分块优化,后面那部分呢?预处理 $d(n) = \sum_{i=1}^{n} \lfloor \frac{n}{i} \rfloor$就行了。。。 跑得还挺慢,5s多。%榜上dalao |