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

    2020/06/13

    开坑莫比乌斯反演(只是一个平平无奇的搬运工罢了)。

    参考: 莫比乌斯反演 - OI Wiki

    积性函数与Dirichlet卷积 - Rogn


    前置知识

    引理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 le r < 1) ]

    所以

    [egin{split} lfloor frac{a}{bc} floor &= lfloor frac{lfloor frac{a}{b} floor + r}{c} floor \ &= lfloor frac{lfloor frac{a}{b} floor}{c} + frac{r}{c} floor \ &= lfloor frac{lfloor frac{a}{b} floor}{c} floor end{split} ]

    引理2

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

    略证:

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

    对于 (d > sqrt{n}),由于 (lfloor frac{n}{d} floor le sqrt{n}),所以也只有 (sqrt{n}) 种取值。

    综上,得证。

    数论分块

    (Rightarrow) 传送门

    积性函数

    定义

    (gcd(a,b) = 1)(f(xy) = f(x)f(y)) ,则称 (f(x)) 为积性函数。

    性质

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

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

    证明:

    前三个显然,下面证明 (h(x) = sum limits_{dmid x} f(d) g(frac{x}{d})) (两个积性函数的 Dirichlet 卷积还是积性函数)

    [egin{split} h(x)h(y) &= left( sum limits_{dmid x} f(d) g(frac{x}{d}) ight) left( sum limits_{dmid y} f(d) g(frac{y}{d}) ight) \ &= sum limits_{dmid xy} f(d) g(frac{xy}{d}) \ &= h(xy) end{split} ]

    例子

    1. 单位函数:(epsilon(1) = left[ n = 1 ight])

    2. 恒等函数:(operatorname{id}_k(n)=n^k)(operatorname{id}_1(n)) 通常记作 (operatorname{id}(n))

    3. 常数函数:(1(n)=1)

    4. 除数函数:(sigma_k(n) = sum limits_{d mid n} d^k)(sigma_0(n)) 通常记作 (operatorname{d}(n))( au(n)) (即约数的个数)(sigma_1(n)) 通常记作 (sigma(n))

    5. 欧拉函数:(varphi(n) = sum limits_{i=1}^{n} left[ gcd(i,n) = 1 ight]),即小于等于 (n) 的数中与 (n) 互质的数的个数

    6. 莫比乌斯函数:(mu(n) = egin{cases} 1 & n=1\ 0 & exists d > 1, operatorname{s.t.} d^2 mid n \ -1^{omega(n)} & otherwise \ end{cases})

      (exists d > 1, operatorname{s.t.} d^2 mid n) 即存在一个质因子出现了两次以上。

      (omega(n)) 表示 (n) 的本质不同的质因子的个数。

    Dirichlet 卷积

    定义

    定义两个数论函数的 Dirichlet 卷积为

    [(f ast g) (x) = sum limits_{d mid x} f(d)g(frac{x}{d}) ]

    性质

    Dirichlet 卷积满足交换律和结合律。

    其中 (varepsilon) 为 Dirichlet 卷积的单位元,即对任意数论函数 (f(x)),都有 (f(x) ast varepsilon = f(x))

    例子

    莫比乌斯函数

    定义

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

    [mu(n) = egin{cases} 1, & n=1 \ 0, & exists d > 1, operatorname{s.t.} d^2 mid n \ -1^{omega(n)}, & otherwise \ end{cases} ]

    性质

    莫比乌斯函数是积性函数,且它还有以下性质:

    [sum limits_{d mid n} mu(d) = egin{cases} 1, & n = 1 \ 0, & n e 1 end{cases} ]

    (sum limits_{d mid n} mu(d) = varepsilon(n)),即 (mu ast 1 = varepsilon)

    证明

    (n = prod limits_{i=1}^{k} p_{i}^{c_i}, n'=prod limits_{i=1}^{k} p_{i})

    那么 (sum limits_{d mid n} mu(d) = sum limits_{d mid n'} mu(d) = sum limits_{i=1}^{k} inom{k}{i} cdot (-1)^{i})

    根据二项式定理,可以知道 (sum limits_{i=1}^{k} inom{k}{i} cdot (-1)^{i} = left[1+(-1) ight]^{k})

    所以 (sum limits_{d mid n} mu(d))(k=0) 时等于 (1),否则等于 (0),即 (sum limits_{d mid n} mu(d) = varepsilon(n))

    补充结论

    反演结论:(left[ gcd(i,j) = 1 ight] iff sum limits_{d mid gcd(i,j)} mu(d))

    证明:直接用上面的结论推导即可。

    线性筛

    线性筛几乎可以筛所有的积性函数,(mu) 也不例外。

    void getMu() {
      mu[1] = 1;
      for (int i = 2; i <= N; ++i) {
        if (!vis[i]) p[++tot] = i, mu[i] = -1;
        for (int j = 1; j <= tot && i * p[j] <= N; ++j) {
          vis[i * p[j]] = 1;
          if (i % p[j] == 0) {
            mu[i * p[j]] = 0;
            break;
          }
          mu[i * p[j]] = -mu[i];
        }
      }
    }
    

    莫比乌斯反演

    定义

    对于两个数论函数 (f(n),g(n)),若

    [f(n) = sum limits_{d mid n} g(d) ]

    [g(n) = sum limits_{d mid n} mu(d) f(frac{n}{d}) ]

    证明

    法一:运用数论变换

    [sum limits_{d mid n} mu(d) f(frac{n}{d}) = sum limits_{d mid n} mu(d) sum limits_{k mid frac{n}{d}} g(k) = sum limits_{k mid n} g(k) sum limits_{d mid frac{n}{k}} mu(d) ]

    然后由 (sum limits_{d mid n} mu(d) = varepsilon(n)) 可知,只有当 (n=k) 时,最后一步中的 (sum limits_{d mid frac{n}{k}}) 才等于 (1),所以 (sum limits_{k mid n} g(k) sum limits_{d mid frac{n}{k}} mu(d) = sum limits_{d mid n} mu(d) f(frac{n}{d}) = g(n))

    证毕。

    法二:利用卷积

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

    (f ast mu = g ast 1 ast mu = g) (其中 (1ast mu = varepsilon)

    非卷积形式

    对于数论函数 (f,g) 和完全非积性函数 (t),且 (t(1)=1),则

    [f(n) = sum limits_{i=1}^{n} mu(i) t(i) g(lfloor frac{n}{i} floor) \ iff g(n) = sum limits_{i=1}^{n} mu(i) t(i) f(lfloor frac{n}{i} floor) ]

    证明留作习题。

    习题

    1. [HAOI2011]Problem b
    2. [UR #5]怎样跑得更快
  • 相关阅读:
    Linux 操作文件目录
    前端HTML所遇到的报错
    【剑指offer】最小的k个数
    【剑指offer】数组中出现次数超过一半的数字
    【剑指offer】栈的压入、弹出序列
    【剑指offer】二叉树的镜像
    【剑指offer】反转链表
    【剑指offer】数值的整数次方
    【剑指offer】重建二叉树
    【剑指offer】旋转数组的最小数字
  • 原文地址:https://www.cnblogs.com/newbielyx/p/13050310.html
Copyright © 2011-2022 走看看