zoukankan      html  css  js  c++  java
  • 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)卷积搭上关系,相当于可以作为推导式子的一个有用工具,其关键在于熟悉定义及其运算,重要常见的几个卷积需要我们牢记。


    <后记>

  • 相关阅读:
    LeetCode Flatten Binary Tree to Linked List
    LeetCode Longest Common Prefix
    LeetCode Trapping Rain Water
    LeetCode Add Binary
    LeetCode Subsets
    LeetCode Palindrome Number
    LeetCode Count and Say
    LeetCode Valid Parentheses
    LeetCode Length of Last Word
    LeetCode Minimum Depth of Binary Tree
  • 原文地址:https://www.cnblogs.com/Parsnip/p/10751025.html
Copyright © 2011-2022 走看看