zoukankan      html  css  js  c++  java
  • 从零开始的莫比乌斯反演(函数)[详细推导]

    也许更好的阅读体验


    (前置技能)

    • 学会莫比乌斯函数必须要先知道狄利克雷函数
    • 以及什么是逆元(一本正经胡说八道)

    (狄利克雷卷积)

    两个函数 $f,g$
    <font size="3">$egin{aligned}f*g(n)=sum_{d|n}^nf(d)g(frac{n}{d})end{aligned}$
    * 性质
    __交换律__$                 f*g=g*f$
    __结合律__$                 f*g*h=f*(g*h)$
    __加法分配率__$          f*(g+h)=f*g+f*h$
    

    (几个定理)

    * ① 定义单位函数$I(n)=[n=1]$,即只有当n等于1时,$I(1)=1$,其余情况都为0
    * ② $I * f=f$ 
    * ③ 已知函数$f$,定义函数$f$的逆$f^{-1}$,满足$f * f^{-1}=I$,且积性函数的逆也是积性函数
    * ④ 由③可得$f^{-1}(1)=frac{1}{f(1)}$
    * ⑤ 令$xi(n)=1$
    

    (莫比乌斯函数)

    • 莫比乌斯函数 (mu=xi^{-1})
      (n=p_1^{a_1}·p_2^{a_2}·cdots p_k^{a_k})
      (mu(n)=xi^{-1}(n)= left{egin{matrix}1 &n=1 \(-1)^k &a1=a2=cdots =ak=1&\ 0&otherwise end{matrix} ight.)

    (如何推导)

    • (如何求逆)

      ③等价于

      (egin{aligned}forall n: sum_{d|n} f(d)·f^{-1}(frac nd)=[n=1]end{aligned})

      (egin{aligned}sum_{d|n}f(d)·f^{-1}(frac nd)=I(n) (n= ot 1)=0end{aligned})

      (f^{-1}(n)·f(1)=-sum_{d|n,d= ot1}f(d)·f^{-1}(frac nd))

      (egin{aligned}f^{-1}(n)=frac{-sum_{d|n,d= ot1}f(d)·f^{-1}(frac nd)}{f(1)}end{aligned})

    • (莫比乌斯函数)

      (f=xi),(p)为质数

      (f^{-1}(1)=1)

      (f^{-1}(p)=frac{-f(p)·f^{-1}(1)}{f(1)}=-1)

      (f^{-1}(p^2)=-(f(p^2)·f^{-1}(1)+f(p)·f^{-1}(p))=0)

      (f^{-1}(p^3)=-(f(p^3)·f^{-1}(1)+f(p^2)·f^{-1}(p)+f(p)·f^{-1}(p^2))=0)

      (egin{aligned}f^{-1}(p^k)=-sum_{i=1}^k f(p^i)·f^{-1}(p^{k-i})end{aligned})

      其中只有 (f(p^k)·f^{-1}(1)=1,f(p^{k-1})·f^{-1}(p)=-1),其余项都是0

      (f^{-1}(p^k)=left{egin{matrix}-1 & k=1\0 & k>1 end{matrix} ight.)

      (n=p_1^{a_1}·p_2^{a_2}·cdots p_k^{a_k})

      所以莫比乌斯函数可以推出来了

      (mu(n)=f^{-1}(n)= left{egin{matrix}1 &n=1 \(-1)^k &a1=a2=cdots =ak=1&Leftarrow 积性函数推出 \ 0&otherwise end{matrix} ight.)


    (莫比乌斯函数的性质)

    • (mu*xi=I)
      因为(mu=xi^{-1})
      所以有(egin{aligned}sum_{d|n}^nmu(d)=sum_{d|n}^nmu·1=mu*xi(n)=I(n)=[n=1]end{aligned})
      记住这句,下面的证明要用到
    • (I*f=f)
    • (f*mu*xi=f)
    • (f*xi=g Rightarrow f=g*mu)

    (线性筛)

    利用积性函数的性质以及(mu)的表达式

    int cnt;
    int prime[maxn],mu[maxn];
    bool vis[maxn];
    void mu_sieve (int n)
    {
    	mu[1]=1;
    	for (int i=2;i<=n;++i){
    		if (!vis[i]){	prime[++cnt]=i,mu[i]=-1;}
    		for (int j=1;j<=cnt&&i*prime[j]<=n;++j){
    			vis[i*prime[j]]=true;
    			if (i%prime[j]==0){
    				mu[i*prime[j]]=0;
    				break;
    			}
    			mu[i*prime[j]]=-mu[i];
    		}
    	}
    }
    
    

    (莫比乌斯反演)

    • 若有 (egin{aligned}g(n)=sum_{d|n}f(d)end{aligned})
      则有 (egin{aligned}f(n)=sum_{d|n}mu(d)g(frac{n}{d})=sum_{d|n}mu(frac{n}{d})g(d)end{aligned})

      • (证明)

        法一 (egin{aligned} sum_{d|n}{mu(d)g(frac{n}{d})}=sum_{d|n}{mu(d)sum_{x|frac{n}{d}}{f(x)}}=sum_{x|n}{f(x)}sum_{d|frac{n}{x}}{mu(d)}=sum_{x|n}{f(x)[frac{n}{x}=1]}=f(n) end{aligned})
        法二 (g=f*xi,f=g*mu)
    • 若有(egin{aligned}g(n)=sum_{n|d}f(d)end{aligned})
      则有(egin{aligned}f(n)=sum_{n|d}mu(frac{d}{n})g(d)end{aligned})

      • (证明)

        (egin{aligned}sum_{n|d}mu(frac{d}{n})g(d)=sum_{k=1}^{+infty}mu(k)g(kn)=sum_{k=1}^{+infty}mu(k)sum_{kn|d}f(d)=sum_{n|d}f(d)sum_{k|frac{d}{n}}mu(k)=sum_{n|d}f(d)[frac{d}{n}=1]=f(n) end{aligned})

      这一种一般用的比较多


    (莫比乌斯反演的应用)

    莫比乌斯函数一般用于(gcd)
    (egin{aligned} sum_{i=1}^nsum_{j=1}^mgcd(i,j)&=sum_d^{min(n,m)} dsum_{i=1}^nsum_{j=1}^m[gcd(i,j)=d] \ &=sum_{d}^{min(n,m)}dsum_{i=1}^{frac nd}sum_{j=1}^{frac md}[gcd(i,j)=1] \ &=sum_{d}^{min(n,m)}dsum_{i=1}^{frac nd}sum_{j=1}^{frac md}sum_{kmid gcd(i,j)}mu(k) \ &=sum_d^{min(n,m)} dsum_k^{min(frac{n}{d},frac{m}{d})}mu(k)sum_{kmid i}^{frac nd}sum_{kmid j}^{frac md} \ &=sum_{d}^{min(n,m)}dsum_k^{min(frac{n}{d},frac{m}{d})}mu(k)lfloor frac n{kd} floor lfloorfrac m{kd} floor end{aligned})
    (T=kd)
    (egin{aligned} =sum_{T}^{min(n,m)}lfloorfrac nT floorlfloorfrac mT floorsum_{kmid T}frac Tkmu(k)end{aligned})
    以上是莫比乌斯反演推出来的式子

    (egin{aligned} =sum_{T}^{min(n,m)}lfloorfrac nT floorlfloorfrac mT floorvarphi(T)end{aligned})
    这一步是欧拉反演,证明请移步欧拉函数|(扩展)欧拉定理|欧拉反演
    当然,这里这个例子不如直接用欧拉反演
    (egin{aligned}sum_{i=1}^nsum_{j=1}^mgcd(i,j)&=sum_{i=1}^nsum_{j=1}^msum_{d|gcd(i,j)}varphi(d)=sum_{d=1}^{min(n,m)}lfloorfrac{n}{d} floorlfloorfrac{m}{d} floorvarphi(d)end{aligned})


    如有哪里讲得不是很明白或是有错误,欢迎指正
    如您喜欢的话不妨点个赞收藏一下吧

  • 相关阅读:
    xml传数据
    简单实用的GroupBox控件
    漂亮的NavMenu导航控件
    使用设计模式构建通用数据库访问类
    Windows路由表详解
    zz Linux Shell常用技巧(目录)
    Ubuntu Linux 环境变量PATH设置
    zz eclipse.ini内存设置
    find 用法
    zz【java规范】Java spi机制浅谈
  • 原文地址:https://www.cnblogs.com/Morning-Glory/p/11172567.html
Copyright © 2011-2022 走看看