zoukankan      html  css  js  c++  java
  • 莫比乌斯反演证明

    前言?

    终于放假了~~感觉再不趁机颓会儿我博客就废了……

    赶紧写点东西刷刷存在感(骗点积分

    莫比乌斯函数

     定义一种函数$mu(d)$,满足:

    1.若$d=1$,则$mu(d)=1$。

    2.若$d=p_1p_2p_3cdots p_k$且$p_i$为互异素数时,$mu(d)=(-1)^k$。

    3.其他情况$mu(d)=0$。

    那么我们将函数$mu(d)$称作莫比乌斯函数。

    看上去很NB?

    通俗一点,就是对于1来说$mu(1)=1$,其他数的话若数d包含相同质因子则$mu(d)=0$,若质因子各不相同,那么若x有奇数个质因子$mu(d)=-1$,否则$mu(d)=1$。

     莫比乌斯函数有许多神奇的性质(就知道两个):

    性质一:$sumlimits_{d|n}mu(d) = [n==1]$

    证明:

    [n==1]意思就是当且仅当n=1时返回1,否则返回0。

    $n=1$时显然成立。

    $n eq 1$时,首先对于$mu(d)=0$的情况我们可以直接忽略,只需考虑$mu(d) eq 0$,即$d=p_1^{c_1}p_2^{c_2}cdots p_k^{c_k}$且对于$forall iin [1,k] c_i=1$的情况。

     设$n=p_1^{c_1}p_2^{c_2}cdots p_i^{c_i}$,则d的质因子个数是j的情况一共有$C_i^j$种。

    那么根据莫比乌斯函数的定义我们可以得到egin{array}{lcl}sumlimits_{d|n}mu(d) & = & C_i^0-C_i^1+C_i^2-cdots +(-1)^iC_i^i \& = & sumlimits_{j=0}^i(-1)^jC_i^j end{array}

    就是说我们只需要证明$sumlimits_{j=0}^i(-1)^jC_i^j = 0$就可以了。

    这个东西就是个裸的二项式定理,不会二项式定理的话可以参考我的另一篇博客又开始骗阅读了)。

    于是我们就愉快的证明出了性质一。

    性质二:$sumlimits_{d|n}frac{mu(d)}{d}=frac{phi(n)}{n}$

    其中$phi(n)$为欧拉函数(来看莫比乌斯反演的应该不会不知道吧……)。

    这个性质会在下面讲狄利克雷卷积时证明。

    求法:

    求单个数的莫比乌斯函数直接分解质因数即可。

    若求1~n项的莫比乌斯函数值,我们可以用Eratosthenes筛法计算。

    #include<cstdio>
    using namespace std;
    int const N=1e5+5;
    int miu[N];
    bool v[N];
    inline void get_miu(int n){
        for(register int i=1;i<=n;++i)
            miu[i]=1;
        for(register int i=2;i<=n;++i){
            if(v[i])continue;
            miu[i]=-1;
            for(register int j=i<<1;j<=n;j+=i){
                v[j]=1;
                if((j/i)%i)miu[j]=-miu[j];
                else miu[j]=0;
            }
        }
        return ;
    }
    int main(){
        int n;
        scanf("%d",&n);
        get_miu(n);
        return 0;
    }
    View Code

    也可以线性筛,只要在线性筛素数的基础上略做修改即可。

    #include<cstdio>
    using namespace std;
    int const N=1e5+5;
    int miu[N],prime[N],tot;
    bool v[N];
    inline void get_miu(int n){
        miu[1]=1;
        for(register int i=2;i<=n;++i){
            if(!v[i])prime[++tot]=i,miu[i]=-1;
            int zz=-miu[i];
            for(register int j=1;j<=tot;++j){
                int now=prime[j]*i;
                if(now>n)break;
                v[now]=1;
                if(i%prime[j])miu[now]=zz;
                else break;
            }
        }
        return ;
    }
    int main(){
        int n;
        scanf("%d",&n);
        get_miu(n);
        return 0;
    }
    View Code

     狄利克雷卷积

    在学习狄利克雷卷积之前我们先了解一个东西叫做数论函数

    我们不必熟悉整个数论函数的体系,我们只需要了解一些常见数论函数即可。

    而如果一个数论函数f对于任意两个互质的正整数a,b满足$f(a imes b)=f(a) imes f(b)$,我们把函数f称作积性函数。

    注意积性函数与积性函数的乘积仍为积性函数。

    我们见到的大部分数论函数都是积性函数,下面举一些例子:

    1.$phi(n)/varphi(n)$ 欧拉函数 表示1~n中与n互质的数的个数。$phi(n)=sumlimits_{i=1}^n[gcd(n,i)==1]$

    2.$mu(n)$ 莫比乌斯函数 上面应该已经说的很清楚了,不再赘述。

    3.$d(n)$ 约数个数 表示n的正因子个数 $d(n)=sumlimits_{d|n}1$

    4.$sigma(n)$ 约数和函数 表示n的所有正因子之和 $sigma(n)=sumlimits_{d|n}d$

    5.$epsilon(n)/e(n)$ 元函数 对于狄利克雷卷积的乘法单位 $epsilon(n)=[n==1]$

    6.$1(n)$ 恒等函数 恒为1 $1(n)=1$

    7.$Id(n)$ 单位函数 就是本身的大小 $Id(n)=n$

    若函数f对于任意一个正整数对(a,b)都满足$f(a imes b)=f(a) imes f(b)$,那么我们把函数f称作完全积性函数。

    上面积性函数例子的5,6,7都是完全积性函数。

    所有狄利克雷特征(一种数论函数,想了解的问度娘去)都是完全积性函数。

    下面,我们正式开始讲解狄利克雷卷积。

     定义一种运算$*$,对于函数f,g满足$(f*g)(n)=sumlimits_{d|n}f(d)g(frac{n}{d})$,我们把这种运算$*$称作狄利克雷卷积。

    狄利克雷卷积满足交换律,结合律以及分配律。

    上面解释元函数$epsilon(n)$时说到元函数是对于狄利克雷卷积的乘法单位,元函数可以在狄利克雷卷积中充当单位元,即$f*epsilon=f$。

    对于一个函数f,如果$f(1) eq 0$,则都存在函数g满足$f*g=epsilon$,我们把g称作f的逆元。

    从某巨神的博客偷的逆元式子:

    $g(n)=frac{1}{f(1)}left([n==1]-sumlimits_{d|n,d eq 1}f(d)g(frac{n}{d}) ight)$

    $sumlimits_{d|n}f(d)g(frac{n}{1})=f(1)g(n)+sumlimits_{d|n,d eq 1}f(d)g(frac{n}{d})=[n==1]$

    下面列举几种卷积关系:

    1.$d=1*1$

    2.$sigma=d*1$

    3.$Id=phi*1$

    4.$epsilon=mu*1$

    5.$phi=mu*Id$

    6.$1=mu*d$

    证明:

    1,2显然(直接把函数表达式代入就行了)。

    3:

    egin{array}{lcl}Id(n) & = & sumlimits_{i=1}^nsumlimits_{j=1}^n[gcd(i,n)==j] \& = & sumlimits_{j|n}sumlimits_{i=1}^{lfloorfrac{n}{j} floor}[gcd(i,frac{n}{j})==1] \& = & sumlimits_{j|n}phi(frac{n}{j}) end{array}

    即 $Id=phi*1$

    其实就是欧拉函数的一个性质:$sumlimits_{d|n}phi(d)=n$

    4就是莫比乌斯函数的性质一,上面已经证明过,不再赘述。

    5:

    我好像说莫比乌斯函数的性质二要在讲狄利克雷卷积时证明?

    这个5其实就是$mu(n)$的性质二。

    egin{array}{cc}Id & = & phi*1 \Id*mu & = & phi*1*mu \Id*mu & = & phi*epsilon \Id*mu & = & phi \ sumlimits_{d|n}mu(d)frac{n}{d}  & = & phi(n) \ sumlimits_{d|n}frac{mu(d)}{d} & = & frac{phi(n)}{n} end{array}

    证毕。

    6.

    egin{array}{cc}d & = & 1*1\d*epsilon & = & 1*1\ d*mu*1 & = & 1*1\ d*mu & = & 1 end{array}

    证毕。

    莫比乌斯反演

    $f(n)=sumlimits_{d|n}g(d) Leftrightarrow g(n)=sumlimits_{d|n}mu(d)f(frac{n}{d})$

    另一种形式:$f(n)=sumlimits_{n|d}g(d) Leftrightarrow g(n)=sumlimits_{n|d}mu(frac{d}{n})f(d)$

    我们先证明第一种形式。

    已知$f(n)=sumlimits_{d|n}g(d)$

    则egin{array}{lcl}sumlimits_{d|n}mu(d)f(frac{n}{d}) & = & sumlimits_{d|n}mu(d)sumlimits_{i|frac{n}{d}}g(i) \& = & sumlimits_{d|n}sumlimits_{i|frac{n}{d}}mu(d)g(i) \& = & sumlimits_{i|n}sumlimits_{d|frac{n}{i}}mu(d)g(i) \& = & sumlimits_{i|n}g(i)sumlimits_{d|frac{n}{i}}mu(d) \& = & g(n)end{array}

    得证。

    然而事实上可以用狄利克雷卷积证明。

     $f(n)=sumlimits_{d|n}g(d)$可以表示为$f=g*1$

    则egin{array}{lcl}f*mu & = & g*1*mu \& = & g*(1*mu) \& = & g*epsilon \& = & g end{array}

    带入就可以得到莫比乌斯反演的两种形式了……

  • 相关阅读:
    sencha touch 扩展篇之将sencha touch打包成安装程序(上)- 使用sencha cmd打包安装程序
    sencha touch 扩展篇之使用sass自定义主题样式 (下)通过css修改官方组件样式以及自定义图标
    一个不错的android组件的网站
    sencha touch 扩展篇之使用sass自定义主题样式 (上)使用官方的api修改主题样式
    sencha touch 入门系列 (九) sencha touch 布局layout
    面试题总结
    国外接活网站Elance, Freelancer和ScriptLance的介绍和对比
    sencha touch 入门系列 扩展篇之sencha touch 项目打包压缩
    Android Design Support Library——Navigation View
    设计模式——命令模式
  • 原文地址:https://www.cnblogs.com/remarkable/p/11364178.html
Copyright © 2011-2022 走看看