给出N,统计满足下面条件的数对(a,b)的个数:
1 ≤ a < b ≤ N 1 ≤ a < b ≤ N 1\le a1≤a<b≤N1≤a<b≤N
a + b a+b a+b整除 a × b a\times b a×b
一行一个数 N N N
一行一个数表示答案
15
4
首先,这题我在刷数学题的时候看到过(确信)。。。。
所以这题是数竟题 ,不过当时数学书上N只有50,并且要写出所有解,并且数学书上的计算方法是O( N 2 N^2 N2)的(因为口算时人脑对于一些枚举和为k的互质的一对数的过程计算起来更快,所以比单纯枚举要快)。
好了进入正题,根据数学书上写的:
设 k = g c d ( a , b ) , a = k x , b = k y k=gcd(a,b),a=kx,b=ky k=gcd(a,b),a=kx,b=ky
那么 ( a + b ) ∣ a b ⟹ ( x + y ) ∣ k x y (a+b)|ab⟹(x+y)|kxy (a+b)∣ab⟹(x+y)∣kxy
又 g c d ( x , y , k ) = 1 gcd(x,y,k)=1 gcd(x,y,k)=1
易知 g c d ( x + y , x y ) = 1 ⟹ ( x + y ) ! ∣ x y gcd(x+y,xy)=1 ⟹ (x+y)!|xy gcd(x+y,xy)=1⟹(x+y)!∣xy
所以 ( x + y ) ∣ k (x+y)|k (x+y)∣k
然后数学书上就开始枚举 k k k了。。。
但是OI很神奇,所以我们接下来继续推式子
a n s = ∑ x = 1 n ∑ y = x + 1 n [ g c d ( x , y ) = = 1 ] ⌊ n m a x ( x , y ) ( x + y ) ⌋ ans=\sum^{n}_{x=1}\sum^{n}_{y=x+1}[gcd(x,y)==1]\lfloor\frac{n}{max(x,y)(x+y)}\rfloor ans=x=1∑ny=x+1∑n[gcd(x,y)==1]⌊max(x,y)(x+y)n⌋
关于 ⌊ n m a x ( x , y ) ( x + y ) ⌋ \lfloor\frac{n}{max(x,y)(x+y)}\rfloor ⌊max(x,y)(x+y)n⌋感性理解 ,是因为 1 ≤ k ≤ n m a x ( x , y ) ( x + y ) 1\le k\le \frac{n}{max(x,y)(x+y)} 1≤k≤max(x,y)(x+y)n, k ∈ N k\in N k∈N所以 k k k一共有 ⌊ n m a x ( x , y ) ( x + y ) ⌋ \lfloor\frac{n}{max(x,y)(x+y)}\rfloor ⌊max(x,y)(x+y)n⌋种取值。
然后因为 y > x , x + y ≤ k y>x,x+y\le k y>x,x+y≤k
所以 y 2 < y ( x + y ) ≤ k y = b ≤ n y^2
所以 y < n y<\sqrt{n} y<n
a n s = ∑ x = 1 n ∑ y = x + 1 n [ g c d ( x , y ) = = 1 ] ⌊ n m a x ( x , y ) ( x + y ) ⌋ ans=\sum^{\sqrt{n}}_{x=1}\sum^{\sqrt{n}}_{y=x+1}[gcd(x,y)==1]\lfloor\frac{n}{max(x,y)(x+y)}\rfloor ans=x=1∑ny=x+1∑n[gcd(x,y)==1]⌊max(x,y)(x+y)n⌋
然后我们就得到了优秀的 O ( N l o g N ) O(NlogN) O(NlogN)的算法
之后的过程开始加速毒瘤化(莫比乌斯反演),带好护目镜。
因为 [ x = = 1 ] = e ( x ) = ∑ d ∣ x μ ( d ) [x==1]=e(x)=\sum_{d|x}\mu(d) [x==1]=e(x)=d∣x∑μ(d)
所以!! a n s = ∑ x = 1 n ∑ y = x + 1 n ⌊ n m a x ( x , y ) ( x + y ) ⌋ ∑ d ∣ g c d ( x , y ) μ ( d ) ans=\sum^{\sqrt{n}}_{x=1}\sum^{\sqrt{n}}_{y=x+1}\lfloor\frac{n}{max(x,y)(x+y)}\rfloor\sum_{d|gcd(x,y)}\mu(d) ans=x=1∑ny=x+1∑n⌊max(x,y)(x+y)n⌋d∣gcd(x,y)∑μ(d)
把最后一个 ∑ \sum ∑掉换到前面
a n s = ∑ σ = 1 n μ ( σ ) ∑ x = 1 n σ ∑ y = x + 1 n σ ⌊ n σ 2 y ( x + y ) ⌋ ans=\sum^{\sqrt{n}}_{\sigma=1}\mu(\sigma)\sum^{\frac{\sqrt{n}}{\sigma}}_{x=1}\sum^{\frac{\sqrt{n}}{\sigma}}_{y=x+1}\lfloor\frac{n}{\sigma^2y(x+y)}\rfloor ans=σ=1∑nμ(σ)x=1∑σny=x+1∑σn⌊σ2y(x+y)n⌋
但是这里的复杂度就很迷模,这里运用调和求和法(详见具体数学) H ^ = n 1 + n 2 + n 3 + . . . . . . + n n = l o g e n + γ + O ( 1 n ) \hat{H}=\frac{\sqrt{n}}{1}+\frac{\sqrt{n}}{2}+\frac{\sqrt{n}}{3}+......+\frac{\sqrt{n}}{\sqrt{n}}=log_e{n}+\gamma+O(\frac{1}{n}) H^=1n+2n+3n+......+nn=logen+γ+O(n1)
这里的 γ \gamma γ是欧拉常数,所以复杂度为 O ( n l o g 2 n ) O(\sqrt{n}log^2n) O(nlog2n),简直是快飞了,但是还是可以考虑优化,设 z = x + y z=x+y z=x+y(因为很容易发现对于 x x x的枚举并没啥用)
a n s = ∑ σ = 1 n μ ( σ ) ∑ y = 1 n σ ∑ z = y + 1 2 y − 1 ⌊ n σ 2 y z ⌋ ans=\sum^{\sqrt{n}}_{\sigma=1}\mu(\sigma)\sum^{\frac{\sqrt{n}}{\sigma}}_{y=1}\sum^{2y-1}_{z=y+1}\lfloor\frac{n}{\sigma^2yz}\rfloor ans=σ=1∑nμ(σ)y=1∑σnz=y+1∑2y−1⌊σ2yzn⌋
这里同样用调和级数计算时间复杂度得到 O ( n l o g n ) O(\sqrt{n}logn) O(nlogn),然后就A掉啦!!