• 莫比乌斯反演


    简介

    莫比乌斯反演是数论上的一种处理技巧。对于一些函数 (f(n)),如果很难直接求出它的值,而容易求出倍数和或约数和 (F(n)),那么可以通过莫比乌斯反演来求得 (f(n)) 的值。
    备注:在本文中,是用 ([A]) 表示 (A) 命题的真值表达,(A) 为真则为 (1),否则为 (0)

    莫比乌斯函数

    定义

    (n=p_1^{q_1}cdot p_2^{q_2}cdots p_k^{q_k}),其中 (p) 为素数,则定义莫比乌斯函数 (mu(n)) 如下:

    [mu(n)=egin{cases}1 & n=1 \ (-1)^k & displaystyle prod_{i=1}^k q_i =1 \ 0 & exists q_i > 1 end{cases} ]

    通俗的来讲,莫比乌斯函数的定义如下:

    1. 莫比乌斯函数 (mu(n))的定义域是(N)
    2. (mu(1)=1)
    3. 当n存在平方因子时,(mu(n)=0)
    4. 当n是素数或奇数个不同素数之积时,(mu(n)=-1)
    5. 当n是偶数个不同素数之积时,(mu(n)=1)

    性质

    性质一:莫比乌斯函数是积性函数。

    [mu(a)mu(b)=mu(acdot b), (a,b)=1 ]

    应用:根据这一性质,可以使用线性筛,在 (O(n)) 的时间预处理出所有 ([1,n]) 内的 (mu) 值。

    void sieve() {
        fill(prime, prime + maxn, 1);
        mu[1] = 1, tot = 0;
        for (int i = 2; i < maxn; i++) {
            if (prime[i]) {
                prime[++tot] = i, mu[i] = -1;
            }
            for (int j = 1; j <= tot && i * prime[j] < maxn; j++) {
                prime[i * prime[j]] = 0;
                if (i % prime[j] == 0) {
                    mu[i * prime[j]] = 0;
                    break;
                } else {
                    mu[i * prime[j]] = -mu[i];
                }
            }
        }
    }
    

    补充:在数论上积性函数的定义。

    (f(n)) 为一个定义在 (N_+) 上的函数。若对于任意 ((x,y)=1)(f(xcdot y)=f(x)f(y)), 则称 (f(n)) 为一个积性函数;若对于任意 (x)(y) 均有 (f(xcdot y)=f(x)f(y)),则称 (f(n)) 为一个 完全积性函数

    性质二

    [displaystyle sum_{d|n}mu(d)=[n=1] ]

    证明
    (n=1) 时显然。

    (n eq 1) 时,设 (n=p_1^{q_1}cdot p_2^{q_2}cdots p_m^{q_m})

    (n) 的所有因子中,(mu) 值不为 (0) 的只有所有质因子次数都为 (1) 的因子,其中质因子个数为 (r) 个的有 (C_k^r) 个。
    那么显然有:(displaystyle sum_{d|n}mu(d)=C_k^0-C_k^1+C_k^2+cdots+(-1)^kC_k^k=sum_{i=0}^k(-1)^iC_k^i)
    由二项式定理知 (displaystyle (x+y)^n=sum_{i=0}^nC_n^ix^iy^{n-i})。令 (x=-1,y=1),代入即可得证。

    莫比乌斯反演

    形式一

    [displaystyle F(n)=sum_{d|n}f(d)implies f(n)=sum_{d|n}igg(mu(d)cdot FBig(frac{n}{d}Big)igg) ]

    证明

    [displaystyle sum_{d|n}igg(mu(d)cdot FBig(frac{n}{d}Big)igg)=sum_{d|n}igg(mu(d)cdot sum_{k|frac{n}{d}}f(k)igg)=sum_{k|n}igg(f(k)cdot sum_{d|frac{n}{k}}mu(d)igg)=f(n) ]

    最后一步时根据莫比乌斯函数的性质二,可得当且仅当 (k=n) 时和式的值为 (f(n)),否则为 (0)

    形式二

    [displaystyle F(n)=sum_{n|d}f(d)implies f(n)=sum_{n|d}igg(muBig(frac{d}{n}Big)cdot F(d)igg) ]

    应用
    容斥原理,数论,杜教筛。

    原博客

  • 相关阅读:
    get_folder_size.ps1
    python3-database-shelve
    Windows中实现不依赖账户登录的开机启动程序
    SpringBoot+SpringDataJPA如何实现自定义且自由度高的查询[多表,多查询条件,多排序条件,分页,自定义sql封装]
    Windows phone 8.1之数据绑定(Data Binding)
    TextBox使用技巧--转载
    在Eclipse中使用git把项目导入到git中--转载
    运用多种知识点实现一个综合小游戏
    Git帮助之初始化项目设置向导
    如何从Eclipse导入github上的项目源码--转载
  • 原文地址:https://www.cnblogs.com/Alessandro/p/9709025.html
Copyright © 2020-2023  润新知