【GDOI2016】互补约数 题解

题目大意

i=1ndigcd(d,id)\sum_{i=1}^n\sum_{d|i}gcd(d,\frac{i}{d})

【20%】n105n \le 10^5

  暴力枚举 ii,然后根号枚举 dd
  时间复杂度 O(nn)O(n\sqrt n)

【50%】n107n \le 10^7

  双sigma带gcd的形式考虑反演。

i=1ndigcd(d,id)=d=1ndf(d)其中f(d)=i=1nji(gcd(j,ij)==d)\begin{aligned} &\sum_{i=1}^n\sum_{d|i}\gcd(d,\frac{i}{d}) \\ =&\sum_{d=1}^{\sqrt n}d*f(d) \\ &其中f(d)=\sum_{i=1}^n\sum_{j|i}(\gcd(j,\frac{i}{j})==d) \end{aligned}

  接下来我们考虑如何快速求 f(d)f(d),方法众多,这里介绍一种非Mobius的方法。
  由于ii分解成两个因数之后,两个因数都要含因子dd,因此ii本身应该是d2d^2的倍数。所以我们不枚举ii,而是直接枚举ti=id2ti=\frac{i}{d^2},相当于jjij\frac{i}{j}已经同时约去了dd。所以

f(d)=ti=1nd2tdti(gcd(td,titd)==1)f(d)=\sum_{ti=1}^{\lfloor \frac{n}{d^2} \rfloor}\sum_{td|ti}(\gcd(td,\frac{ti}{td})==1)

  我们现在其实是把 titi 分解成两个因数,然后两个因数互质。考虑将 titi 分解质因数,那么对于 titi 的同一种质因子,tdtd 要么将它全选,要么全不选。因此第二个sigma只与titi的质因数种类数有关。设 g[ti]g[ti] 表示 titi 的质因数种类数,则

f(d)=ti=1nd22g[ti]f(d)=\sum_{ti=1}^{\lfloor \frac{n}{d^2} \rfloor}2^{g[ti]}

  我们只需预处理 gg 数组即可。
  时间复杂度主要在预处理上,所以是 O(n)O(n)。(注意那个nd2\lfloor \frac{n}{d^2} \rfloor,由于分母以平方速度增长,所以整个分数下降速度是很快的)

【100%】n1011n \le 10^{11}

  上述解法的瓶颈在于g[ti]g[ti]不好求,因为titi最大会达到nn,预处理存不下,现场求又慢。所以对于f(d)f(d)我们要换一种求法。
  事实上,求f(d)f(d)是Mobius反演的经典问题。

f(d)=i=1nji(gcd(j,ij)==d)=i=1nj=1, ijnn(gcd(i,j)==d)\begin{aligned} f(d)&=\sum_{i=1}^n\sum_{j|i}(\gcd(j,\frac{i}{j})==d) \\ &=\sum_{i=1}^n\sum_{j=1,\ ij \le n}^n(\gcd(i,j)==d) \end{aligned}

  令m=nd2m=\lfloor \frac{n}{d^2} \rfloor,则上式

=i=1mj=1, ijmm(gcd(i,j)==1)=D=1mμ(D)t=1mD2mD2t\begin{aligned} &=\sum_{i=1}^m\sum_{j=1,\ ij \le m}^m(\gcd(i,j)==1) \\ &=\sum_{D=1}^m\mu(D)\sum_{t=1}^{\lfloor \frac{m}{D^2} \rfloor}\lfloor \frac{m}{D^2t} \rfloor \end{aligned}

  总式为

d=1ndD=1nd2μ(D)t=1nd2D2nd2D2t\sum_{d=1}^{\sqrt n}d*\sum_{D=1}^{\lfloor \frac{n}{d^2} \rfloor}\mu(D)\sum_{t=1}^{\lfloor \frac{n}{d^2D^2} \rfloor}\lfloor \frac{n}{d^2D^2t} \rfloor

  接下来用《莫比乌斯反演(宋新波)》里的一种变形。(参考wc2016课件)
  令T=dDT=d*D,则原式为

T=1ndTdμ(Td)t=1nT2nT2t\sum_{T=1}^n\sum_{d|T}d*\mu(\frac{T}{d})\sum_{t=1}^{\lfloor \frac{n}{T^2} \rfloor}\lfloor \frac{n}{T^2t} \rfloor

  事实上如果T>nT>\sqrt n,则第三个sigma无意义。所以原式为

T=1nG(T)t=1nT2nT2t,其中G(T)=dTdμ(Td)\sum_{T=1}^{\sqrt n}G(T)\sum_{t=1}^{\lfloor \frac{n}{T^2} \rfloor}\lfloor \frac{n}{T^2t} \rfloor,其中G(T)=\sum_{d|T}d*\mu(\frac{T}{d})

  显然 GG 数组是可预处理的,第二个sigma可以分块解决。
  时间复杂度:预处理为 O(nlog(n))O(\sqrt n \cdot \log(\sqrt n)),最终式子求值为 O(n?)O(\sqrt n*?)??为一个不是很大的常数。(注意那个nT2\lfloor \frac{n}{T^2} \rfloor,由于分母以平方速度增长,所以整个分数下降速度是很快的)