莫比乌斯反演 学习笔记

0、前言

ljm没有进省队,走上了文化课的不归路。
ljm非常不甘心,考虑到tyz的数学整体水平不高,ljm决定认真学习数学,以便出毒瘤数学题来为难进队的神仙们。
那么先从莫比乌斯反演开始。

1、开始

莫比乌斯反演最基本的就是这样两个式子:
对于约数的莫比乌斯反演:
若: F(n)=d|nf(d)
那么满足 f(n)=d|nμ(d)F(nd)
对于倍数的莫比乌斯反演:
若: F(n)=n|df(d)
那么满足: f(n)=d|nμ(dn)F(d)
这里的 μ(x) 是莫比乌斯函数。

2、莫比乌斯函数

(1) 定义

莫比乌斯函数的定义如下:
i=1 时, μ(i)=1
i=p1p2p3pk ,其中 p1,p2,p3,,pk 为质数, μ(i)=(1)k
其余情况 μ(i)=0

(2) 性质

  • 性质一:莫比乌斯函数是积性函数,即满足: μ(ab)=μ(a)μ(b),(a,b)=1
    应用:鉴于各种套路,我们知道积性函数一般是可以被线性筛出来的,所以莫比乌斯函数同样有着线性筛法:
void shai()
{
    mu[1]=1;
    for(int i=2;i<=maxn;i++)
    {
        if(!vis[i])
        prime[++tot]=i,mu[i]=-1;
        for(int j=1;j<=tot && i*prime[j]<=maxn;j++)
        {
            vis[i*prime[j]]=1;
            if(i%prime[j]==0)
            {
                mu[i*prime[j]]=0;
                break;
            }
            else mu[i*prime[j]]=-mu[i];
        }
    }
}
  • 性质二: d|nμ(d)=[n=1]
    • 证明:当 n=1 时, μ(1)=1 ,得证。
    • n1 时,设 n=p1k1p2k2pmkm d=p1t1p2t2pmtm
      因为莫比乌斯函数的定义,如果任意 xi>1 ,那么 μ(d)=0 ,所以我们只用考虑 xi=0 xi=1 的情况。
      不妨假设有 d 中有 r xi=1 ,那么可得:
      d|nμ(d)=r=0m(mr)(1)r(n1)
      后面的式子是不是很眼熟?感觉很像二项式定理。
      二项式定理长这样: (x+y)n=k=0n(nk)xnkyk
      我们令 x=1,y=1 ,将 n,k 换成 m,r ,原式变形为:
      (11)m=r=0m(mr)(1)r=1 ,得证。
  • 性质三:并没有什么用,先占个坑,有空回来填。

3、莫比乌斯反演证明

  • 以最基础的 f(n)=d|nμ(d)F(nd) 为例证明吧。
    • F(n) 的定义可得: F(nd)=d'|ndf(d')
    • 代回原式可得 d|nμ(d)F(nd)=d|nμ(d)d'|ndf(d')
    • 如果令 nd=kd' ,那么 kd=nd' ,也就是 d|nd' 。因为每一个 μ(d) 都要与每一个 f(d') 乘一次,即: d|nμ(d)d'|ndf(d')=d|nd'μ(d)d'|nf(d')
    • 由莫比乌斯函数的性质二可得,只有 d=n 时,上式的和为 f(n) ,其余情况为0,得证。

4、有什么用?

刚刚翻来覆去说了半天好像也没说这个懵逼莫比乌斯反演有什么用
莫比乌斯反演,一般用来解决 F(n) 能很快(一般是 O(1) )求出,但题目要求你求 f(n) ,且求 f(n) 的复杂度极高(一般是 O(n2) ),这时候我们就可以通过莫比乌斯反演来 O(n) 的求出来 f(n) 的值。

基本的莫比乌斯反演就这些东西了。但没几道题会用到这么简单的东西。所以高级应用和骚操作还是要去做难题来慢慢积累啊。

5、一些例题

占坑。

猜你喜欢

转载自blog.csdn.net/qq_39791208/article/details/80054206