• sss


    <更新提示>

    <第一次更新>


    <正文>

    简单积性函数

    在学习欧拉函数的时候,相信读者对积性函数的概念已经有了一定的了解。接下来,我们将相信介绍几种简单的积性函数,以备(dirichlet)卷积的运用。

    定义

    数论函数:在数论上,对于定义域为正整数,值域为复数的函数,我们称之为数论函数。

    积性函数:对于数论函数(f),若满足(gcd(a,b)=1)时,有(f(ab)=f(a)f(b)),则称函数(f)为积性函数

    简单积性函数

    约数个数函数

    [ au(n)=sum_{k|n}1 ]

    约数和函数

    [sigma(n)=sum_{k|n}k ]

    元函数

    [e(n)=egin{cases}1 (n=1)\0 (n ot =1)end{cases} ]

    恒等函数

    [I(n)=1 ]

    单位函数

    [epsilon(n)=n ]

    欧拉函数

    [phi(n)=sum_{i=1}^n[gcd(n,i)==1] ]

    (Möbius)函数

    [n=prod_{i=1}^kp_i^{a_i},mu(n)=egin{cases}1 (n=1)\(-1)^k (forall c_i=1)\0 (exists c_i>1)end{cases} ]

    简单积性函数的求解

    与经典的(Möbius)函数和欧拉函数同理,这些积性函数都是可以通过线性筛的过程顺带地求出来的,我们不再详细讨论,具体可以参见(hezlik)的博客

    dirichlet卷积

    定义

    (dirichlet)卷积是数论函数之间的一种运算,我们设有两个数论函数(f)(g),它们的定义域为正整数([1,n]),那么它们的(dirichlet)卷积可以如下表示:

    [(f imes g)(n)=sum_{d|n}f(x)g(frac{n}{d}) ]

    我们可以简单地用(O(nlog_2n))的时间求出两个函数的(dirichlet)卷积,其时间复杂度可以使用调和级数证明。

    (Code:)

    inline void dirichlet(long long *a,long long *b)
    {
        long long res[N]={};
        for (int i=1;i<=n;i++)
            for (int j=1;j*i<=n;j++)
                res[i*j] = (res[i*j] + a[i] * b[j] % Mod) % Mod ;
        memcpy( a , res , sizeof res );
    }
    

    性质

    (1.) 两个积性函数(f)(g)(dirichlet)卷积仍为积性函数。

    证明:
    设有两个积性函数(f)(g),则它们的(dirichlet)卷积为:

    [h=f imes g=sum_{d|n}f(d)g(frac{n}{d}) ]

    对于函数(h)则可以得到:

    [h(x)h(y)=(sum_{d_1|x}f(d_1)g(frac{x}{d_1}))(sum_{d_2|y}f(d_2)g(frac{y}{d_2})) \=sum_{d_1|x,d_2|y}f(d_1d_2)g(frac{xy}{d_1d_2})\=sum_{d|xy}f(d)g(frac{xy}{d})=h(xy)]

    故函数(h)为积性函数。

    (2.) (dirichlet)卷积满足交换律。

    证明:
    设有数论函数(f)(g),则有

    [f imes g=sum_{d|n}f(n)g(frac{n}{d})\=sum_{d|n}g(n)f(frac{n}{d})=g imes f ]

    (3.) (dirichlet)卷积满足结合律。

    证明:
    设有数论函数(f)(g)(h),则有

    [(f imes g) imes h=f imes g imes h\=g imes h imes f=(g imes h) imes f\=f imes (g imes h) ]

    (4.)(dirichlet)卷积满足分配律。

    证明:
    设有数论函数(f)(g)(h),则有

    [(g+h) imes f=sum_{d|n}(g(d)+h(d))f(frac{n}{d}) \=sum_{d|n}g(d)f(frac{n}{d})+sum_{d|n}h(d)f(frac{n}{d}) \=g imes f+h imes f]

    简单卷积

    (1.) (f imes e=f)

    证明:

    [(f imes e)(n)=sum_{d|n}f(d)e(frac{n}{d})\=sum_{d|n}f(d)[frac{n}{d}==1]\=sum_{d|n}f(d)[n==d]=f(n) ]

    由上,我们证明了(dirichlet)卷积这种运算的单位元为原函数(e),我们可以进一步地定义出数论函数(f)的逆函数(f^{-1}),使得(f imes f^{-1})成立,可以用如下方式构造:

    [f^{-1}(n)=egin{cases} frac{1}{f(1)} (n=1)\-frac{1}{f(1)}sum_{d|ncap d<n}f (frac{n}{d})f^{-1}(d) (n ot=1)end{cases}]

    (2.) (e=mu imes I)

    证明:
    考虑(Möbius)函数的一个性质,对于质数(p)和整数(a)满足(p ot|a),有(mu(ap)+mu(a)=0),这是可以由(Möbius)函数的定义得到的,那么我们设(n=prod_{i=1}^kp_i^{a_i}),则

    [(mu imes I)(n)=sum_{d|n}mu(d)I(frac{d}{n})=sum_{d|n}mu(d) ]

    事实上枚举了(n)的每一个约数,并对其的(mu)函数值进行了求和。

    (P={1,p_1,p_2,...,p_{k-1}}),由此可得:

    [(mu imes I)(n)=sum_{Ssubseteq P}left (mu(prod_{pin S}p) + mu(p_kprod_{pin S}p) ight ) ]

    (mu)函数的性质可知:

    [(mu imes I)(n)=0 (n>1) ]

    (n=1)((mu imes I)(1)=1),所以有(e=mu imes I)

    (3.) (phi=mu imesε)

    证明:

    欧拉函数是可以用容斥原理算的,考虑到(mu)函数的定义,发现(mu)可以恰好可以作为欧拉函数的容斥系数,即有:

    [phi(n)=n+sum_{x ot =1cap x|n}frac{n}{x}mu(x)\=sum_{x|n}frac{n}{x}mu(x)=(mu imes ε)(n) ]

    (4.) (sigma=I imes epsilon)

    证明:
    利用定义展开,得

    [(I imes epsilon)(n)=sum_{d|n}I(frac{n}{d})epsilon(d)\=sum_{d|n} d=sigma(n) ]

    (5.) ( au=I imes I)

    证明:
    利用定义展开,得

    [(I imes I)(n)=sum_{d|n}I(frac{n}{d})I(d)\=sum_{d|n}1= au(n) ]

    简单运用

    (1.) 欧拉函数具有性质:(n=sum_{d|n}phi(frac{n}{d}))

    证明:

    [n=epsilon(n)=(epsilon imes e)(n)=(epsilon imes mu imes I)(n)\=(phi imes I)(n)=phi(n) ]

    (2.) 两次(dirichlet)卷积,可以得到:(sigma= au imesphi)

    证明:

    [sigma(n)=(I imesepsilon)(n)=(I imes I imesphi)(n)=( au imes phi)(n) ]

    (3.) 可以推得(Möbius)定理:(F(n)=sum_{d|n}f(d)Leftrightarrow f(n)=sum_{d|n}mu(d)F(frac{n}{d}))

    证明:
    已知(F=I imes f),试证明(f=mu imes F),可以利用(dirichlet)卷积推导:

    [F=I imes f \mu imes F=mu imes I imes f \mu imes F=e imes f=f ]

    运用

    多数时候,对于约数求和式和一些有关数论函数的运算都可以和(dirichlet)卷积搭上关系,相当于可以作为推导式子的一个有用工具,其关键在于熟悉定义及其运算,重要常见的几个卷积需要我们牢记。


    <后记>

  • 相关阅读:
    Vscode开发工具中的Simple React Snippets插件,对React开发有哪些便捷
    函数防抖和节流
    4.怎么样用CSS实现一个loading效果
    3.常见清除浮动的
    2.css处理各种溢出
    1. css画三角形
    2.javascript中call()和apply()区别
    1.js的继承的实现方法
    css、js小技巧
    JS函数声明和函数表达式的关系
  • 原文地址:https://www.cnblogs.com/Parsnip/p/10751025.html
Copyright © 2020-2023  润新知