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

    莫比乌斯反演是数论中的重要内容。对于一些函数(f(n)),如果汉南直接求出它的值,而容易求出其背书和或约数和(g(n)),那么可以通过莫比乌斯反演简化运算,求得(f(n))的值。

    我们需要一些前置知识:积性函数、狄利克雷卷积、莫比乌斯函数

    前置芝士

    引理1

    [forall a,b,c in mathbb{Z},lfloor frac{a}{bc} floor = lfloor frac{lfloor frac{a}{b} floor}{c} floor ]

    略证:

    [frac{a}{b} = lfloor frac{a}{b} floor + r(0 leq r < 1) implies lfloor frac{a}{bc} floor = lfloor frac{a}{b} * frac{1}{c} floor = lfloor frac{1}{c}(lfloor frac{a}{b} floor + r) floor = lfloor frac{lfloor frac{a}{b} floor}{c} + frac{r}{c} floor = lfloor frac{lfloor frac{a}{b} floor}{c} floor ]

    引理2

    [forall n in N,left| left{lfloor frac{n}{d} floor din N ight} ight| leq lfloor 2 sqrt{n} floor ]

    (|A|)表示集合(A)中的元素个数

    略证:

    对于(d leq lfloor sqrt{n} floor)(lfloor frac{n}{d} floor)(lfloor sqrt{n} floor)种取值

    对于(d > lfloor sqrt{n} floor),有(lfloor frac{n}{d} floor leq lfloor sqrt{n} floor) ,也只有(lfloor sqrt{n} floor)种取值

    综上,得证

    数论分块

    数论分块快的过程大概如下:考虑含有(lfloor frac{n}{i} floor)的求和式子((n)为常数)

    对于任意一个(i(i leq n)),我们需要找到一个最大的(j(i leq j leq n)),使得(lfloor frac{n}{i} floor = lfloor frac{n}{j} floor)

    略证:

    [lfloor frac{n}{i} floor leq frac{n}{i} implies lfloor frac{n}{lfloor frac{n}{i} floor} floor geq lfloor frac{n}{frac{n}{i}} floor = lfloor i floor= i implies i leq lfloor frac{n}{lfloor frac{n}{i} floor} floor ]

    (j = lfloor frac{n}{lfloor frac{n}{i} floor} floor)

    利用上述结论,我们每次以([i,j])为一块,分块求和即可

    积性函数

    定义

    (gcd(x,y) = 1)(f(xy) = f(x)f(y)),则(f(n))为积性函数

    性质

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

    [h(x) = f(x^p)\ h(x) = f^p(x)\ h(x) = f(x)g(x)\ h(x) = sum_{d|x}f(d)g(frac{x}{d}) ]

    例子

    • 单位函数:(epsilon(n) = [n = 1])
    • 恒等函数:(id_k(n) = n^kid_1(n))通常简记作(id(n))
    • 常数函数:(1(n) = 1)
    • 除数函数:(sigma_k(n) = sum_{k|n}d^k sigma_0(n))通常简记作(d(n))( au(n))(sigma_1(n))通常简记作(sigma(n))
    • 欧拉函数:(varphi(n) = sum_{i =1}^n[gcd(i,n) = 1])
    • 莫比乌斯函数:(mu(n) = egin{cases}1 & n = 1 \ 0 & exists d:d^{2} mid n \ (-1)^{omega(n)} & otherwise end{cases})其中(omega(n))表示(n)的本质不同质因子个数,是一个积性函数
      狄利克雷卷积

    定义

    定义两个数论函数(f,g)的狄利克雷卷积为

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

    性质

    狄利克雷卷积满足交换律和结合律

    其中(varepsilon)为狄利克雷卷积的单位元(任何函数卷(epsilon)都为其本身)

    例子

    [varepsilon = mu * 1 iff varepsilon(n) = sum_{d|n}mu(d)\ d = 1*1 iff d(n) = sum_{d|n}1 \ sigma = d * 1 iff sigma(n) = sum_{d|n}d \ varphi = mu * ID iff varphi(n) = sum_{d|n}d*mu(frac{n}{d}) ]

    莫比乌斯函数

    定义

    (mu)为莫比乌斯函数,定义为

    [mu(n) = egin{cases} 1 & n=1\ 0 &n ext{含有平方因子}\(-1)^k & k ext{为}n ext{的本质不同质因子个数} end{cases} ]

    详细解释一下:

    (n = prod_{i = 1}^kp_i^{c_i}),其中(p_i)为质因子,(c_i geq 1)。上述定义表示:

    • (n = 1)时,(mu(n) = 1)

    • 对于(n ot= 1)时:

      • 当存在(i in [1,k]),使得(c_i > 1)时,(mu(n) = 0),也就是说只要某个质因子出现的次数超过一次,(mu(n))就等于0;
      • 当任意(i in [1,k]),都有(c_i = 1)时,(mu(n) = (-1)^k),也就是说每个质因子都仅仅只出现过一次时,即(n = prod_{i = 1}^kp_i)({p_i}_{i = 1}^k)中元素唯一时,(mu(n))等于-1的(k)次幂,此处(k)指的便是仅仅只出现过一次的质因子的总个数。

    性质

    莫比乌斯函数不但是积性函数,还有如下性质:

    [sum_{d|n}mu(d) = egin{cases} 1 & n = 1 \ 0 & n ot= 1 end{cases} ]

    (sum_{d|n}mu(d) = varepsilon(n)),即(mu * 1 = varepsilon)

    证明

    (n = prod_{i = 1}^kp_i^{c_i})(n' = prod_{i = 1}^kp_i)

    那么(sum_{d|n}mu(d) = sum_{d|n'}mu(d) = sum_{i = 0}^kC^i_k*(-1)^i = (1+(-1))^k)

    根据二项式定理,易知该式子的值在(k = 0)(n = 1)时值为(1)否则为(0),这也同时证明力(sum_{d|n}mu(d) = [m = 1] = varepsilon(n))以及(mu * 1 = varepsilon)

    补充结论

    反演结论:([gcd(i,j) = 1] iff sum_{d|gcd(i,j)}mu(d))

    直接推导

    如果看懂了上一个结论,这个结论稍加思考便可以:如果(gcd(i,j) = 1)的话,那么代表着我们按上个结论中枚举的那个(n)(1),也就是式子的值是(1),反之,有一个与([gcd(i,j) = 1])相同的值:0

    利用(varepsilon)函数

    根据上一结论,([gcd(i,j) = 1]implies varepsilon(gcd(i,j))),讲(varepsilon)展开即可

    线性筛

    由于(mu)函数为积性函数,因此可以线性筛莫比乌斯函数(线性筛基本可以求所有的积性函数,尽管方法不尽相同)

    拓展

    证明

    [varphi*1 = ID(ID函数即f(x)=x) ]

    (n)分解质因数:(n = prod_{i = 1}^kp_i^{c_i})

    首先,因为(varphi)是积性函数,故只要证明当(n'=p^c)(varphi * 1 = sum_{d|n}varphi(frac{n'}{d} = ID))成立即可。

    因为(p)是质数,于是(d = p^0,p^1,p^2,···,p^c)

    易知如下过程:

    [varphi * 1 = sum_{d|n}varphi(frac{n}{d})\=sum_{i = 0}^cvarphi(p^i)\=1+p^0*(p - 1)+p^1*(p - 1)+···+p^{c - 1}*(p - 1)\=p^c\=ID ]

    该式子两侧同时卷(mu)可得(varphi(n) = sum_{d|n}*mu(frac{n}{d}))

    莫比乌斯反演

    (f(n),g(n))为两个数论函数

    如果有

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

    那么有

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

    证明

    方法一:对原式做数论变换

    [sum_{d|n}mu(d)f(frac{n}{d}) = sum_{d|n}mu(d)sum_{k|frac{n}{d}}g(k) = sum_{k|n}g(k)sum_{d|frac{n}{k}}mu(d) = g(n) ]

    (sum_{d|n}g(d))来替换(f(frac{n}{d})),再变换求和顺序。最后一步变换的依据:

    (sum_{d|n}mu(d) = [n = 1]),因此在(frac{n}{k} = 1)时第二个和式的值才为(1)。此时(n = k),故原式等价于(sum_{k|n}[n = k]*g(k)=g(n))

    方法二:运用卷积

    原问题为:已知(f = g*1),证明(g = f* mu)

    易知如下转化:(f*mu = g * 1 * mu implies f* mu = g)(其中(i * mu = varepsilon))。

  • 相关阅读:
    排序算法之直接插入排序
    排序算法之快速排序
    进程内存空间
    python基础13 ---函数模块3(正则表达式)
    python基础12 ---函数模块2
    python基础11 ---函数模块1
    python基础10 ---匿名函数和递归
    python基础9 -----python内置函数2
    python基础8 -----迭代器和生成器
    python基础7 ---python函数
  • 原文地址:https://www.cnblogs.com/excellent-zzy/p/12305769.html
Copyright © 2011-2022 走看看