Luogu P3327 [SDOI2015]约数个数和

P3327 [SDOI2015]约数个数和

题意

TT 组数据,每组数据给出 n,mn, m,求解

i=1nj=1md(ij)\sum_{i=1}^n\sum_{j=1}^md(ij)

其中 d(n)=in1d(n)=\sum_{i|n}1,即为 nn 的约数个数。

数据范围:1T,n,m5×1041\leqslant T,n,m\leqslant 5\times10^4

思路

主要要看出来这个式子:

d(ij)=xiyj[gcd(x,y)=1]d(ij)=\sum_{x|i}\sum_{y|j}[\text{gcd}(x, y) = 1]

证明:i=p1α1p2α2psαs,j=p1β1p2β2psβsi = p_1^{\alpha_1}p_2^{\alpha_2}\cdots p_s^{\alpha_s}, j = p_1^{\beta_1}p_2^{\beta_2}\cdots p_s^{\beta_s},其中p1,p2,,psp_1,p_2,\ldots,p_s 为两两不同的素数,αk,βk0\alpha_k, \beta_k\geqslant 0

ij=p1α1+β1p2α2+β2psαs+βsij = p_1^{\alpha_1+\beta_1}p_2^{\alpha_2+\beta_2}\cdots p_s^{\alpha_s+\beta_s},我们又知道约数个数可以通过标准分解式的每个素数个数来表示,即:

d(ij)=(α1+β1+1)(α2+β2+1)(αs+βs+1)d(ij)=(\alpha_1+\beta_1+1)(\alpha_2+\beta_2+1)\cdots(\alpha_s+\beta_s+1)

我们考虑如何通过 i,ji, j 的约数 x,yx, y 来生成 ijij 的约数(不重复的)

对于 pk,(1ks)p_k, (1\leqslant k\leqslant s),我们发现如果当 gcd(x,y)=1\text{gcd}(x, y)=1 时,xx 最多能遍历 αk\alpha_kpkp_k,而 yy 最多能遍历 βk\beta_kpkp_k,当 x,yx, y 中都没有 pkp_k 时,就对应 +1+1,于是总个数合起来,正好就是 αk+βk+1\alpha_k+\beta_k+1

对于每一个 pkp_k 都如此,所以上式成立。

QED

下面就是推式子了:

i=1nj=1mxiyj[gcd(x,y)=1]=i=1nj=1mxiyjdgcd(x,y)μ(d)=d=1min(n,m)μ(d)i=1nj=1mxiyj[dgcd(x,y)]=d=1min(n,m)μ(d)x=1ny=1mi=1nxj=1my[dgcd(x,y)]=x=x/d,y=y/dd=1min(n,m)μ(d)x=1ndy=1mdi=1nxdj=1myd1=d=1min(n,m)μ(d)x=1ndi=1nxd1y=1mdj=1myd1=d=1min(n,m)μ(d)x=1ndndxy=1mdmydg(n)=i=1nni原式=d=1min(n,m)μ(d)g(nd)g(md)\begin{aligned} &\sum_{i=1}^n\sum_{j=1}^m\sum_{x|i}\sum_{y|j}[\text{gcd}(x, y)=1]\\ =&\sum_{i=1}^n\sum_{j=1}^m\sum_{x|i}\sum_{y|j}\sum_{d|\text{gcd}(x, y)}\mu(d)\\ =&\sum_{d=1}^{\min(n, m)}\mu(d)\sum_{i=1}^n\sum_{j=1}^m\sum_{x|i}\sum_{y|j}[d|\text{gcd}(x,y)]\\ =&\sum_{d=1}^{\min(n, m)}\mu(d)\sum_{x=1}^n\sum_{y=1}^m\sum_{i=1}^{\left\lfloor\frac{n}{x}\right\rfloor}\sum_{j=1}^{\left\lfloor\frac{m}{y}\right\rfloor}[d|\text{gcd}(x,y)]\\ \xlongequal{x=x/d, y=y/d}&\sum_{d=1}^{\min(n, m)}\mu(d)\sum_{x=1}^{\left\lfloor\frac{n}{d}\right\rfloor}\sum_{y=1}^{\left\lfloor\frac{m}{d}\right\rfloor}\sum_{i=1}^{\left\lfloor\frac{n}{xd}\right\rfloor}\sum_{j=1}^{\left\lfloor\frac{m}{yd}\right\rfloor}1\\ =&\sum_{d=1}^{\min(n, m)}\mu(d)\sum_{x=1}^{\left\lfloor\frac{n}{d}\right\rfloor}\sum_{i=1}^{\left\lfloor\frac{n}{xd}\right\rfloor}1\sum_{y=1}^{\left\lfloor\frac{m}{d}\right\rfloor}\sum_{j=1}^{\left\lfloor\frac{m}{yd}\right\rfloor}1\\ =&\sum_{d=1}^{\min(n, m)}\mu(d)\sum_{x=1}^{\left\lfloor\frac{n}{d}\right\rfloor}\left\lfloor\frac{n}{dx}\right\rfloor\sum_{y=1}^{\left\lfloor\frac{m}{d}\right\rfloor}\left\lfloor\frac{m}{yd}\right\rfloor\\ \end{aligned}\\ \text{设} g(n)=\sum_{i=1}^n\left\lfloor\frac{n}{i}\right\rfloor\\ \begin{aligned} \text{原式}&=\sum_{d=1}^{\min(n, m)}\mu(d)g(\left\lfloor\frac{n}{d}\right\rfloor)g(\left\lfloor\frac{m}{d}\right\rfloor) \end{aligned}

于是我们可以先预处理出 g(n),(1n5×104)g(n), (1\leqslant n\leqslant 5\times10^4),复杂度 O(NN)O(N\sqrt N)

然后对于每一个 n,mn, m,再使用数论分块,复杂度 O(TN)O(T\sqrt N)

总复杂度 O(NN)O(N\sqrt N)


Luogu P3327 [SDOI2015]约数个数和
https://wty-yy.github.io/posts/45770/
作者
wty
发布于
2021年8月20日
许可协议