【Mobius绮丽的辗转】莫比乌斯反演

来源:互联网 发布:拖延心理学知乎 编辑:程序博客网 时间:2024/04/30 23:57

Problem

对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数。
1n500001ab500001cd500001k50000

Sub problem

Ans(i,j)表示有多少个数对(x,y),满足x≤i,c≤y≤j,且gcd(x,y) = k
我们可以先求出Ans(b,d),Ans(b,c1),Ans(a1,d),Ans(a1,c1)
然后ans=Ans(b,d)Ans(b,c1)Ans(a1,d)+Ans(a1,c1)

那么问题就变成了如何求Ans(n,m)

Discuss

讨论一下Ans(n,m)如何求,其中n<m
先设f(k),表示有多少个数对(x,y),满足x≤n,c≤y≤m,且gcd(x,y) = k
显然Ans(n,m)=f(k)

再设g(k),表示多少个数对(x,y),满足x≤n,c≤y≤m,且k|gcd(x,y)
因为k|gcd(x,y),所以设x=kx,y=ky
由于x只能取1...nky只能取1...mk

所以

g(k)=nkmk

同时,我们会有

g(k)=i=1nkf(ik)(1)

此时,我们将g(k)f(k)表示,并且g(k)是容易求出结果的。


Mobius

正片开始

我们非常功利地得出结论:
正当我们遇到这种式子时,

g(i)=d|if(d)(2)

g(i)=j=1nkf(ij)(3)

g[d]积性函数,我们可以将上式转化为,
f(i)=d|ig(d)μ(id)

f(i)=j=1nkg(ij)μ(j)

其中
μ(x)=1,(1)k,0,x=1x=ki=1pi,piPotherwise


Discuss:μ的性质

(1)μ是积性函数
可以证明,μ函数也是积性函数,所以μ可以通过线性筛法预处理,如下代码。

miu[1]=1;for (i=2;i<maxn;i++){    if (!bz[i]){        p[++p[0]]=i;        miu[i]=-1;    }    for (j=1;j<=p[0];j++){                  k=i*p[j];        if (k>=maxn) break;        bz[k]=true;        if (i%p[j]==0){            miu[k]=0;            break;        }else miu[k]=-miu[i];    }}

(2)μ的“和性质”

d|nμ(d)={0,1,n=1n>1

Back to the Problem

题目的式子是

g(k)=i=1nkf(ik)(1)

(2)有异曲同工之妙,
所以
f(k)=i=1nkg(ik)μ(i)=i=1nknikmikμ(i)

然而,这并没有什么卵用,我们仍然过不了。
还能优化??

Deeplier discuss

我们发现,
其实nikmik很多时候是相同的取值。
所以我们可以将相同值的nikmik合并一起来计算,来优化时间复杂度。
显然nik的取值最多有2n种,
所以可以把时间复杂度优化到O(2n+2m)一次询问。

Ending

至此,我们已解决了这道题。
原题Code。

Proving

μ的“和性质”

求证:

d|nμ(d)={0,1,n=1n>1

证明:
n=1时显然;
讨论n>1的情况,
因为μ的定义,
μ(x)=1,(1)k,0,x=1x=ki=1pi,piPotherwise

所以d|nμ(d)中,只有当d的任意质因子的指数不能超过1时,μ(d)才会对产生贡献。
我们设n质因子个数为q个。
那么,
d|nμ(d)=i=0qCiq(1)i

我们观察一下杨辉三角:
11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 11 6 15 20 15 6 1...

显然的是,当q是偶数时,由杨辉三角的对称性,
d|nμ(d)=i=0qCiq(1)i=0

现在考虑q(q>1)是奇数的情况,
i=0qCiq(1)i=C0qCqq+i=1q1Ciq(1)i=C0qCqq+i=1q1(Ci1q1+Ciq1)(1)i=C0qCqq+i=1q1Ci1q1(1)i+i=1q1Ciq1(1)i=i=0q1Ciq1(1)i+1+i=0q1Ciq1(1)i

q1是偶数,综上,
d|nμ(d)=i=0qCiq(1)i=0

得证。

证明反演

求证:

g(i)=d|if(d)f(i)=d|ig(d)μ(id)

证明:
d|ig(d)μ(id)=d|iμ(id)d|df(d)

这里经历一个重要的过程:转换主体,
感性地想,所有的μ(id)都与f(d)相乘过,其中d|d
反过来,那么所有的f(d)都与μ(id)相乘过,其中d|d
所以,
d|iμ(id)d|df(d)=d|if(d)d|d,d|iμ(id)

x=id,则d=ix,那么
d|if(d)d|d,d|iμ(id)=d|if(d)d|ix,ix|iμ(x)=d|if(d)x|idμ(x)

μ的“和性质”,
d!=i时,则id>1,所以x|idμ(x)=0
d=i时,则id=1,所以x|idμ(x)=1
所以
d|if(d)μ(id)=d|if(d)x|idμ(x)=f(i)

综上,
f(i)=d|ig(d)μ(id)

得证。


另一个变式(3)类似。

True Ending

至此,Mobius反演已证明完毕。
这里写图片描述

1 0
原创粉丝点击