[国家集训队2012] 和与积

一道数论好题(突然发现我还没写莫比乌斯反演的博客,先挖个坑吧。。)
题目描述

给出N,统计满足下面条件的数对(a,b)的个数:

1 ≤ a < b ≤ N 1 ≤ a < b ≤ N 1\le a<b \le N1≤a<b≤N 1a<bN1a<bN
a + b a+b a+b整除 a × b a\times b a×b

输入格式

一行一个数 N N N

输出格式

一行一个数表示答案

输入输出样例
输入 #1

15

输出 #1

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=1ny=x+1n[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)} 1kmax(x,y)(x+y)n k ∈ N k\in N kN所以 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>xx+yk
所以 y 2 < y ( x + y ) ≤ k y = b ≤ n y^2<y(x+y)\le ky=b\le n y2<y(x+y)ky=bn
所以 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=1n y=x+1n [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)=dxμ(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=1n y=x+1n max(x,y)(x+y)ndgcd(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=σ=1n μ(σ)x=1σn y=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 +......+n n =logen+γ+O(n1)
这里的 γ \gamma γ是欧拉常数,所以复杂度为 O ( n l o g 2 n ) O(\sqrt{n}log^2n) O(n log2n),简直是快飞了,但是还是可以考虑优化,设 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=σ=1n μ(σ)y=1σn z=y+12y1σ2yzn
这里同样用调和级数计算时间复杂度得到 O ( n l o g n ) O(\sqrt{n}logn) O(n logn),然后就A掉啦!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值