【BZOJ2671】Calc(莫比乌斯反演)
【BZOJ2671】Calc BZOJ 给出N,统计满足下面条件的数对(a,b)的个数: 1. \(1\le a\lt b\le N\) 2. \(a+b\) 整除 \(a*b\) 我竟然粘了题面!!! 还是今天菊开讲的。 设出 \(d=gcd(a,b)\) 那么,设 \(a=xd,b=yd,gcd(x,y)=1\) \((x+y)d|xyd^2,x+y|xyd\) 根据辗转相减的原理 可以得到 \(gcd(x+y,x)=gcd(x+y,y)=gcd(x,y)=1\) ,所以 \(x+y|d\) 。 设 \(d=k(x+y)\) ,因为 \(a<b\) ,所以 \(x<y\) ,因为 \(d=k(x+y)\le n\) 而 \(b=yd=yk(x+y)\le n\) 所以确定了 \(x,y\) 之后,有 \(\frac{n}{y(x+y)}\) 个 \(d\) 根据上面的式子,还可以知道 \(y\lt\sqrt n\) 所以,我们要求的就是 \[\sum_{x=1}^{\sqrt n}\sum_{y=x+1}^{\sqrt n}[gcd(x,y)=1]\frac{n}{y(x+y)}\] 这样直接算的复杂度是 \(O(nlogn)\) 发现 \(gcd\) 的形式非常可以莫比乌斯反演 先把 \(x,y\) 反过来 \[\sum_{y=1}^{\sqrt n}\sum_{x=1}^