[关闭]
@ZYK1997 2015-04-09T07:26:53.000000Z 字数 1883 阅读 1114

CQOI 2015

刷题


Prob 1:[BZOJ 3930] 选数

给定 n,k,l,r ,询问:从[l,r]中选出n个数,使得Gcd(a1,a2,,an)=k的方案数

莫比乌斯反演

我们设
 f(x) 表示从[l,r]中选出n个数,使得Gcd(a1,a2,,an)=k的方案数
同时设
g(x)=xdf(d)=(rxl1x)n
g(x)f(x)的倍数和,相当于是后缀和,而一般的莫比乌斯变换,是约数和,相当于前缀和
类比莫比乌斯反演的证明过程,我们容易证明:无论是约数和还是后缀和的莫比乌斯变换,都可以进行莫比乌斯反演

f(k)=kdμ(dk)g(d)
=j=1μ(j)g(jk)
=j=1rμ(j)(rjkl1jk)n
后面的那一坨分块搞,μ(x)的前缀和怎么办?
题目的数据范围109……筛法会挂……
下面介绍一个比较神奇的sum(x)=Ni=1μ(i)的求法
sum(x)=1i=2Nsum(Ni)
证明如下:
sum(x)=i=1Nμ(i)
=1+i=2Nμ(i)
[i=1]=diμ(d)=di,diμ(d)+μ(i)
μ(i)=[i=1]di,diμ(d)
=1i=2Ndi,diμ(d)
=1dμ(d)i=2N[di  di]
=1dμ(d)(Nd1)
=1dμ(d)i=2N[dNi]
=1i=2Nd=1Niμ(d)
=1i=2Nsum(Ni)
这样一来,我们就可以来搞了
通过记忆化搜索,我们可以得到Θ(N34)的算法

但是这样还不够
我们设定一个阈值,预处理出小于阈值的sum
对于大于阈值的进行记忆化搜索
根据计算:

Θ(N23)+i=2N13Θ(Ni)=Θ(N23+N132Nxdx)=Θ(N23)
所以,我们将阈值设置为N23,也就是106
至此,问题完美解决。

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