zoukankan      html  css  js  c++  java
  • 积性函数

    莫比乌斯反演的前置知识

    定义

    如果一个数论函数(f)满足:当(nperp m)时,有

    [f(nm) =f(n)f(m) ]

    则称其为积性函数

    当不需要满足互质条件((nperp m))就能满足(f(nm) = f(n)f(m))时,称其为完全积性函数

    (f)是积性函数,且(n=p_1^{alpha_1}p_2^{alpha_2}…p_s^{alpha_s})(n)的标准分解,则有

    [f(n)=f(p_1^{alpha_1})f(p_2^{alpha_2})…f(p_s^{alpha_s}) ]

    因此研究积性函数(f)可以转化为研究(f(p^{alpha})),即(f)在素数和素数的幂上的取值。

    积性函数求值

    (f)是积性函数,为求(f(n)),可以对(n)分解素因子,然后计算所有的(f(p^{alpha}))乘起来,因此积性函数求值都可以用线性筛来求

    如果要对(1)(n)之间的所有数求出(f),注意到( ext{Euler})筛法的过程中可以求出每个数的最小素因子和最小素因子的幂次,利用此就能在线性时间内计算出所需的(f)的值

    欧拉筛如何求出最小素因子的幂次
    void sieve() {
        ip[0] = ip[1] = 1;
        alpha[1] = 0;
        for (int i = 2; i < XR; i++) {
            if (!ip[i]) p[c++] = i, alpha[i] = 1, p1[i] = i;
            for (int j = 0; j < c && i * p[j] < XR; j++) {
                ip[i * p[j]] = 1;
                p1[i * p[j]] = p[j];
                if (i % p[j]) alpha[i * p[j]] = 1;
                else {
                    alpha[i * p[j]] = alpha[i] + 1;
                    break;
                }
            }
            //最小素因子:p1[i] ^ alpha[i]
        }
    }
    

    常见积性函数

    单位函数

    单位函数(epsilon(n))定义为

    [epsilon(n)=[n=1]=left{ egin{aligned} 1, & n=1 \ 0, & n eq 1 end{aligned} ight.]

    其中([ ext{condition}])表示当( ext{condition})为真时取值为(1),否则为(0)的函数。

    除数函数

    除数函数(sigma_{k}(n))用来表示(n)的因子的(k)次方之和:

    [sigma_{k}(n)=sum_{d|n}d^{k} ]

    约数个数(sigma_{0}(n))常记为(d(n)),约数和(sigma_{1}(n))常记为(sigma(n))

    可以证明除数函数都是积性函数。

    证明

    每个素因子对函数的贡献都是独立的,它们之间的贡献可以用乘积来衡量,举一个例子:要算(n)的约数个数(即(d(n))),就要枚举(n)的约数(d),考虑(n)的标准分解,也就是(n=p_1^{alpha_1}p_2^{alpha_2}…p_s^{alpha_s}),可以想象出(d)的素因子也跑不出这些个素因子,只不过上面的指数不一样,假设是(smalleta),那么也就是(d=p_1^{eta_1}p_2^{eta_2}…p_s^{eta_s})(eta_1)显然是要在(0)(alpha_1)之间,否则(d)就不是(n)的约数了,同理每个(eta)都是对应的每个(0)(alpha)之间的,那么(eta_1)(0)(alpha_1)(alpha_1+1)种取值,每个(eta)的选取是独立的,所以他们的贡献的乘积就是((1+alpha_1)*(1+alpha_2)*…*(1+alpha_s)),这就是(sigma_0)的算法,其他的(sigma_k)是一样的,只不过((1 + alpha))这一步要换成一个求和的形式。

    素因子贡献独立是一个常见的思路。

    Euler函数(欧拉函数)

    ( ext{Euler})函数(varphi(n))表示不超过(n)且与(n)互质的正整数的个数,即

    [varphi(n)=sumlimits_{i=1}^{n}[gcd(i,n)=1] ]

    比如说(varphi(6)=2),两个数是(1,5)(varphi(10)=4),四个数分别为(1,3,5,7)

    (n)的标准分解并结合容斥原理,我们可以得到欧拉函数的显示表达式:

    [varphi(n)=n·prod_{i=1}^{s}(1-frac{1}{p_i}) ]

    其中(p_i)是质数,(n=p_1^{alpha_1}p_2^{alpha_2}…p_s^{alpha_s})(n)的标准分解。

    性质

    对于任(n)( ext{Euler})函数具有如下性质:

    [n=sum_{d|n}varphi(d) ]

    要证明这个等式,我们将(1)(n)中的所有整数按与(n)的最大公约数分类。

    (gcd(n,i)=d),那么(gcd(frac{n}{d},frac{d}{i})=1)。而又(frac{i}{d})是不超过(frac{n}{d})的整数,故这样的(i)(varphi(frac{n}{d}))个。

    考虑所有(d|n),我们就考虑到了所有(1)(n)之间的(n)个整数,因此有

    [n=sum_{d|n}varphi(frac{n}{d})=sum_{d|n}varphi(d) ]

    证明积性

    以下是从大佬那里淘来的证明

    同样的,(tperp nmLeftrightarrow tperp n,tperp mLeftrightarrow(tmod n)perp n,(tmod m)perp m),所以每个 ([1, nm])之间的与(nm)互质的数(t)都可以对应到一个([1,n])的与(n)互质的数 (tmod n)和一个([1,m])的与(m)互质的数(tmod m)

    并且根据中国剩余定理,这种对应是一一对应的(即已知 (aperp n, bperp m)后可以唯一确定一个([1,nm])之间的(t)使得(tmod n=a, tmod m=b),且(tperp nm))。因此 (varphi(nm)=varphi(n)varphi(m))


    然而我看不懂……还是从定义上来证明吧!

    假设有两个互质的正整数(n,m),则

    [varphi(n)=nprod(1-frac{1}{p_i}) ]

    [varphi(m)=mprod(1-frac{1}{p_{i'}}) ]

    [varphi(n)varphi(m)=nprod(1-frac1{p_i})mprod(1-frac1{p_{i'}})=nmprod(1-frac1{p_i})prod(1-frac1{p_{i'}}) ]

    因为(n,m)互质,所以(p_i)(p_{i'})各各都不相同,且都是(nm)的质因子

    因此就可以推出(varphi(nm)=varphi(n)varphi(m))

    至此,积性函数的性质得证。但是由上面的证明可知,(n,m)必须要互质才可以满足欧拉函数是积性函数,由此可见欧拉函数不是完全积性函数

    恒等函数

    (mathbf{id}^k=n^k),(mathbf{id}(n)=n)

    (就酱紫一笔带过吧……)

    性质

    (mathbf{f}(x))(g(x))均为积性函数,则以下函数也为积性函数

    [egin{aligned} h(x)&=f(x^p)\ h(x)&=f^p(x)\ h(x)&=f(x)g(x)\ h(x)&=sum_{dmid x}f(d)g(frac{x}{d}) end{aligned} ]

    部分性质的证明

    来自铃悬的数学讲堂(抄这个东西也很累……)

    两个积性函数的狄利克雷卷积是积性函数

    考虑到上面的性质,即“若(nperp m)则每个(nm)的约数都可以分解成一个(n)的约数和一个(m)的约数的积”,并且有另一个性质:若(nperp m,amid n,bmid m)(aperp b)

    于是若(nperp m),我们就有

    [egin{aligned}t(nm)&=sum_{dmid nm}f(d)gleft(frac{nm}d ight)\&=sum_{amid n,bmid m}f(ab)gleft(frac{nm}{ab} ight)\&=sum_{amid n,bmid m}f(a)f(b)gleft(frac na ight)gleft(frac mb ight)\&=left(sum_{amid n}f(a)gleft(frac na ight) ight)left(sum_{bmid m}f(b)gleft(frac mb ight) ight)\&=t(n)t(m)end{aligned} ]

    积性函数的逆是积性函数

    第二个重要的结论:积性函数的逆是积性函数
    对于一个积性函数 (f) ,如何证明其逆 (g(n)=[n=1]-sum_{imid n,i eq1}f(i)gleft(frac ni ight)) (注意,积性函数一定满足 (f(1)=1) ,因为 (f(1)=f(1)f(1)) ,并且如果 (f(1)=0)(f(n)equiv0) ,这种情况我们不考虑)也满足积性呢?
    (nm) 的大小进行归纳:

    (nm=1) 时, (g(1)=1) ,结论显然成立;

    假设 (nm > 1) ,当 (n'm'< nm) 的时候有 (g(n'm')=g(n')g(m'))

    [egin{aligned}g(nm)&=-sum_{dmid nm,d eq1}f(d)gleft(frac{nm}d ight)\&=-sum_{amid n,bmid m,ab eq1}f(ab)gleft(frac{nm}{ab} ight)\&=-sum_{amid n,bmid m,ab eq1}f(a)f(b)gleft(frac na ight)gleft(frac mb ight)\&=f(1)f(1)g(n)g(m)-sum_{amid n,bmid m}f(a)f(b)gleft(frac na ight)gleft(frac mb ight)\&=g(n)g(m)-left(sum_{amid n}f(a)gleft(frac na ight) ight)left(sum_{bmid m}f(b)gleft(frac mb ight) ight)\&=g(n)g(m)-epsilon(n)epsilon(m)\&=g(n)g(m)end{aligned} ]

    注意前面几步把 (g(frac{nm}{ab})) 拆成 (g(n/a)g(m/b)) 的时候 (frac{nm}{ab}<nm) ,可以运用归纳条件。
    最后一步是因为 (nm>1) 所以 (n,m) 之间至少一个不为 (1) ,则 (epsilon(n)epsilon(m)=[n=1][m=1]=0)

    就酱紫吧

  • 相关阅读:
    阿里云主机如何重装系统?
    Linux下mysql新建账号及权限设置
    Ahead-of-time compilation(AOT)
    XBOX ONE游戏开发常见问题
    云计算之路-阿里云上:RDS用户的烦恼
    数字证书原理
    《你不常用的c#之二》:略谈GCHandle
    批处理文件指定jre路径启动java桌面应用程序
    关于OAUTH2.0的极品好文
    第一天接触Orchard
  • 原文地址:https://www.cnblogs.com/loceaner/p/12785419.html
Copyright © 2011-2022 走看看