题目名称 2135. [SDOI 2015] 约数个数和
输入输出 SDOI2015yue.in/out
难度等级 ★★★☆
时间限制 10000 ms (10 s)
内存限制 128 MiB
测试数据 10
题目来源 Gravatarmikumikumi 于2016-02-25加入
开放分组 全部用户
提交状态
分类标签
数论 莫比乌斯反演
分享题解
通过:67, 提交:87, 通过率:77.01%
GravatarBPM136 100 2.152 s 1.13 MiB C++
GravatarBPM136 100 2.165 s 1.13 MiB C++
Gravataryveh 100 2.245 s 1.50 MiB C++
Gravataryveh 100 2.247 s 1.50 MiB C++
GravatarL_in 100 2.269 s 1.50 MiB C++
GravatarAntiLeaf 100 2.340 s 1.10 MiB C++
Gravataryveh 100 2.379 s 1.89 MiB C++
Gravatarkito 100 2.522 s 1.87 MiB C++
Gravatar河北交通广播992大师来了 100 2.548 s 1.48 MiB C++
GravatarZXCVBNM_1 100 2.565 s 1.70 MiB C++
关于 约数个数和 的近10条评论(全部评论)
回复 @ZXCVBNM_1 :
建议自己多推推!
Gravatar梦那边的美好ET
2019-09-15 00:22 4楼
回复 @FoolMike :
好神奇,为啥呢?求dalao提示QwQ
GravatarZXCVBNM_1
2019-08-30 19:26 3楼
回复 @sxysxy :
膜拜sxy的公式!其实
\[ \sum_{i=1}^{n} {[ \frac{n}{i}]} \] = \[ \sum_{i=1}^{n} {d[i]} \]
GravatarFoolMike
2017-03-31 21:06 2楼
交一发惨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
Gravatarsxysxy
2017-03-13 08:34 1楼

2135. [SDOI 2015] 约数个数和

★★★☆   输入文件:SDOI2015yue.in   输出文件:SDOI2015yue.out   简单对比
时间限制:10 s   内存限制:128 MiB

【题目描述】

设 $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