[关闭]
@ZYK1997 2015-04-03T12:02:35.000000Z 字数 5811 阅读 2483

莫比乌斯反演

数论


Prob 1:

给你 n,m,求1xn,1ym并且gcd(x,y) is prime(x,y)的数目

思路一:直接利用常用公式进行变换

p is primei=1Nj=1M[gcd(i,j)=p]

=pi=1Npj=1Mp[gcd(i,j)=1]

=pi=1Npj=1Mpdgcd(i,j)μ(d)

=pdμ(d)i=1Np[di]j=1Mp[dj]

=pdμ(d)NpdMpd

我们设 T=pd
ans=TNTMTpT  p is primeμ(Tp)

我们设 g(x)=px  p is primeμ(xp)
通过观察,我们觉得g(x)很像狄利克雷卷积。但是,很抱歉,它不是……
所以g(x)不是积性函数。不能用筛法啦!!!
真的不能用筛法了吗?
其实可以。
我们来推导g(ip)(p is prime)的性质:
g(ip)=dipμ(ipd)=μ(i)+dip  dpμ(ipd)
d,p is prime
g(ip)=μ(i)+diμ(ipd)
When  pi, ikp, μ(ipd)=μ(kp2d)=0, g(ip)=0
When  pi,gcd(i,p)=1, μ(ipd)=μ(id)μ(p)=μ(id),g(ip)=μ(i)diμ(id)=μ(i)g(i)
于是我们可以筛法“筛”出g(x)函数了。
剩下的就很简单了,不再赘述。

当然,我们的最终目的其实只是获得pTμ(Tp)的前缀和,对吧?
既然如此,我们何不采取更为直接的方法呢?
直接暴力枚举质数,去更新这个质数的倍数的前缀和!
 limnni=11i=lnn+r这个结论易知每个质数更新时是均摊Θ(logn)
而质数的个数恰好是Θ(nlogn)
所以这样暴力维护的效率是均摊Θ(N)的。

思路二:莫比乌斯反演

既然是莫比乌斯反演啦,当然就要构造两个函数了。
f(d)=Ni=1Mj=1[gcd(i,j)=d]
g(d)=Ni=1Mj=1[dgcd(i,j)]
二者之间的关系:
g(x)=dxf(d)
根据莫比乌斯反演
f(x)=xdμ(dx)g(d)
很明显g(x)=NxMx
f(x)=xdμ(dx)NxMx
通过换元
f(x)=dμ(d)NxdMxd
那么ans=p,p is primef(p)
剩下的不讲了,和思路一完全一样。不再赘述。


Prob 2:

多次询问,每次给你 a,b,c,d,k,询问bi=adj=c[gcd(i,j)=k]

有上下边界怎么办?
先不考虑边界限制!
我们考虑这个问题的简化版:
询问Ni=1Mj=1[gcd(i,j)=k]
这个很水吧?就是上面的 Prob 1
那么加上边界怎么办?
考虑“容斥原理”
f(a,b,c,d,k)=g(b,d,k)g(a1,d,k)g(c1,b,k)+g(a1,c1,k)
问题解决。

容斥原理、莫比乌斯反演、经典公式变换要能熟练灵活的结合使用。


Prob 3

给你 a,b,c,求gcd(i,j,k)=1(i,j,k)的数量,其中1ia,1jb,1kc

这个嘛……╮(╯▽╰)╭还是两种推法:
Method 1:

ans=i=1aj=1bk=1c[gcd(i,j,k)=1]

=i=1aj=1bk=1cdgcd(i,j,k)μ(d)

=i=1aj=1bk=1cdi  dj  dkμ(d)
\
=dμ(d)i=1a[di]j=1b[dj]k=1c[dk]

=dμ(d)adbdcd

接下来怎么做?我就呵呵一笑不说话……
Method 2:
莫比乌斯反演,构造:
f(x)=ai=1bj=1ck=1[gcd(i,j,k)=x]
g(x)=ai=1bj=1ck=1[xgcd(i,j,k)]=axbxcx
很明显
g(x)=dxf(d)
反演
f(x)=xdμ(dx)g(d)
换元,令ddx,d=dx
f(x)=dμ(d)g(dx)=dμ(d)adbdcd

总结一下,我们会发现,莫比乌斯反演虽然有两种形式:

g(x)=dxf(d)f(x)=dxμ(d)g(xd)
g(x)=dxf(d)f(x)=xdμ(dx)g(d)

但是,实际应用时,第二种形式更加常用,但是换元很重要,不要换错了!


Prob 4[BZOJ 3529]

F(i)i的约数和,q次给定 n,m,a,求
i=1nj=1m[F(gcd(i,j))<=a]F(gcd(i,j)) mod 231

n,m105,q2×104,a109

a的存在很难受,我们先不考虑a的限制
g(k)=ni=1mj=1[gcd(i,j)=k],那么

ans=i=1min(n,m)F(i)g(i)

=i=1min(n,m)F(i)idμ(di)ndmd

=dndmdidF(i)μ(di)

很明显,问题的关键就是idF(i)μ(di)这一堆东西了
还是那两个思路:
Method 1:
很明显,F(x),μ(x)都是积性函数,H(x)=idF(i)μ(di)是它们的狄利克雷卷积,也是积性函数
所以,我们可以筛法搞定。
Method 2:
还是那句话,傻瓜也有傻瓜的好处,暴力枚举更新i的倍数,Θ(N logN)解决。
回到原问题上来:a的限制怎么办?
我们发现,只有F(i)ai才会对答案有贡献
我们离线排序,询问按a排序,iF(i)排序
每次询问,将符合条件的i插入树状数组中维护前缀和
至此,问题完美解决。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注