【hdu5382】GCD?LCM! 题解

题目大意

  令 f(n)=i=1nj=1n [ gcd(i,j)+lcm(i,j)n ]f(n)=\sum_{i=1}^n\sum_{j=1}^n~[~gcd(i,j)+lcm(i,j)≥n~],求 S(n)=i=1nf(i)S(n)=\sum_{i=1}^nf(i)
  多组询问,T105n106T \le 10^5,n \le 10^6

第一反应

  拿到式子大多数同学开始反演了。。。
  TT 这么大,还得能预处理。。。

  直接刚反演的话,我反正是刚不出来,题解也不是这么做的。

题解

  考虑递推!!
  看 f(n1)f(n-1) 如何推到 f(n)f(n)。我们发现,就是少了 i=ni=nj=nj=n 的情况,然后多了 gcd+lcm=n1gcd+lcm=n-1 的情况。当 i=ni=nj=nj=n 时,lcm(i,j)nlcm(i,j)≥n,所以一定可以。因此递推式就是:

f(n)=f(n1)+2n1i=1n1j=1n1 [ gcd(i,j)+lcm(i,j)=n1 ]f(n)=f(n-1)+2n-1-\sum_{i=1}^{n-1}\sum_{j=1}^{n-1}~[~\gcd(i,j)+lcm(i,j)=n-1~]

  后面那部分就可以反演了。

g(n)=i=1nj=1n [ gcd(i,j)+lcm(i,j)=n ]=d=1ni=1ndj=1nd [ gcd(i,j)=1 ] [ d+ijd=n ]=dni=1nd1j=1nd1 [ gcd(i,j)=1 ] [ ij=nd1 ]=dnh(nd1)h(m)=i=1mj=1m [ gcd(i,j)=1 ] [ ij=m ]=2λ(m)\begin{array}{rcl} g(n)&=&\sum_{i=1}^n\sum_{j=1}^n~[~gcd(i,j)+lcm(i,j)=n~]\\ &=&\sum_{d=1}^n\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{n}{d}\rfloor}~[~gcd(i,j)=1~]~[~d+ijd=n~]\\ &=&\sum_{d|n}\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor-1}\sum_{j=1}^{\lfloor\frac{n}{d}\rfloor-1}~[~gcd(i,j)=1~]~[~ij=\lfloor\frac{n}{d}\rfloor-1~]\\ &=&\sum_{d|n}h(\lfloor\frac{n}{d}\rfloor-1)\\ h(m)&=&\sum_{i=1}^m\sum_{j=1}^m~[~gcd(i,j)=1~]~[~ij=m~]\\ &=&2^{\lambda(m)} \end{array}

  其中 λ(m)\lambda(m) 表示 mm 的质因数种类数,即 m=p1c1p2c2...pλ(m)cλ(m)m=p_1^{c_1}p_2^{c_2}...p_{\lambda(m)}^{c_{\lambda(m)}}

  到这一步,全部都可以预处理了。