• 莫比乌斯反演证明


    前言?

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

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

    莫比乌斯函数

     定义一种函数$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}

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

  • 相关阅读:
    第二次冲刺——第5天
    第二次冲刺——第4天
    第二次冲刺——第3天
    第二次冲刺——第2天
    第二次冲刺——第1天
    团队开发——第一次冲刺第8天
    团队开发——第一次冲刺第7天
    团队开发——第一次冲刺第1天
    软件工程课堂练习——找出1-n中1出现的个数
    软件工程——《你的灯亮着吗》读书笔记2
  • 原文地址:https://www.cnblogs.com/remarkable/p/11364178.html
Copyright © 2020-2023  润新知