题目名称 | 2135. [SDOI 2015] 约数个数和 |
---|---|
输入输出 | SDOI2015yue.in/out |
难度等级 | ★★★☆ |
时间限制 | 10000 ms (10 s) |
内存限制 | 128 MiB |
测试数据 | 10 |
题目来源 | mikumikumi 于2016-02-25加入 |
开放分组 | 全部用户 |
提交状态 | |
分类标签 | |
分享题解 |
通过:67, 提交:87, 通过率:77.01% | ||||
BPM136 | 100 | 2.152 s | 1.13 MiB | C++ |
BPM136 | 100 | 2.165 s | 1.13 MiB | C++ |
yveh | 100 | 2.245 s | 1.50 MiB | C++ |
yveh | 100 | 2.247 s | 1.50 MiB | C++ |
L_in | 100 | 2.269 s | 1.50 MiB | C++ |
AntiLeaf | 100 | 2.340 s | 1.10 MiB | C++ |
yveh | 100 | 2.379 s | 1.89 MiB | C++ |
kito | 100 | 2.522 s | 1.87 MiB | C++ |
河北交通广播992大师来了 | 100 | 2.548 s | 1.48 MiB | C++ |
ZXCVBNM_1 | 100 | 2.565 s | 1.70 MiB | C++ |
关于 约数个数和 的近10条评论(全部评论) | ||||
---|---|---|---|---|
回复 @ZXCVBNM_1 :
建议自己多推推!
梦那边的美好ET
2019-09-15 00:22
4楼
| ||||
回复 @FoolMike :
好神奇,为啥呢?求dalao提示QwQ
ZXCVBNM_1
2019-08-30 19:26
3楼
| ||||
交一发惨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 |
设 $d(x)$ 为 $x$ 的约数个数,给定 $N,M$,求 $\sum_{i=1}^N\sum_{j=1}^Md(ij)$。
输入文件包含多组测试数据。
第一行,一个整数 $T$,表示测试数据的组数。
接下来的 $T$ 行,每行两个整数 $N,M$。
$T$ 行,每行一个整数,表示你所求的答案。
2 7 4 5 6
110 121
$1\le N,M\le 50000$,$1\le T\le 50000$。
SDOI 2015
BZOJ 3994