P3327 [SDOI2015]约数个数和
题意
有 T 组数据,每组数据给出 n,m,求解
i=1∑nj=1∑md(ij)
其中 d(n)=∑i∣n1,即为 n 的约数个数。
数据范围:1⩽T,n,m⩽5×104
思路
主要要看出来这个式子:
d(ij)=x∣i∑y∣j∑[gcd(x,y)=1]
证明: 设 i=p1α1p2α2⋯psαs,j=p1β1p2β2⋯psβs,其中p1,p2,…,ps 为两两不同的素数,αk,βk⩾0。
则 ij=p1α1+β1p2α2+β2⋯psαs+βs,我们又知道约数个数可以通过标准分解式的每个素数个数来表示,即:
d(ij)=(α1+β1+1)(α2+β2+1)⋯(αs+βs+1)
我们考虑如何通过 i,j 的约数 x,y 来生成 ij 的约数(不重复的)
对于 pk,(1⩽k⩽s),我们发现如果当 gcd(x,y)=1 时,x 最多能遍历 αk 个 pk,而 y 最多能遍历 βk 个 pk,当 x,y 中都没有 pk 时,就对应 +1,于是总个数合起来,正好就是 αk+βk+1。
对于每一个 pk 都如此,所以上式成立。
QED
下面就是推式子了:
===x=x/d,y=y/d==i=1∑nj=1∑mx∣i∑y∣j∑[gcd(x,y)=1]i=1∑nj=1∑mx∣i∑y∣j∑d∣gcd(x,y)∑μ(d)d=1∑min(n,m)μ(d)i=1∑nj=1∑mx∣i∑y∣j∑[d∣gcd(x,y)]d=1∑min(n,m)μ(d)x=1∑ny=1∑mi=1∑⌊xn⌋j=1∑⌊ym⌋[d∣gcd(x,y)]d=1∑min(n,m)μ(d)x=1∑⌊dn⌋y=1∑⌊dm⌋i=1∑⌊xdn⌋j=1∑⌊ydm⌋1d=1∑min(n,m)μ(d)x=1∑⌊dn⌋i=1∑⌊xdn⌋1y=1∑⌊dm⌋j=1∑⌊ydm⌋1d=1∑min(n,m)μ(d)x=1∑⌊dn⌋⌊dxn⌋y=1∑⌊dm⌋⌊ydm⌋设g(n)=i=1∑n⌊in⌋原式=d=1∑min(n,m)μ(d)g(⌊dn⌋)g(⌊dm⌋)
于是我们可以先预处理出 g(n),(1⩽n⩽5×104),复杂度 O(NN)。
然后对于每一个 n,m,再使用数论分块,复杂度 O(TN)。
总复杂度 O(NN)。
点击显/隐代码