码迷,mamicode.com
首页 > 其他好文 > 详细

莫比乌斯反演

时间:2018-09-26 19:41:43      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:org   bre   博客   处理   pre   表示   line   tps   break   

简介

莫比乌斯反演是数论上的一种处理技巧。对于一些函数 \(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)=\begin{cases}1 & n=1 \\ (-1)^k & \displaystyle \prod_{i=1}^kq_i=1 \\ 0 & q_i>1 \end{cases}\]
可知有平方因子的数的莫比乌斯函数值为 \(0\)

性质

性质一:莫比乌斯函数是积性函数。
\[\mu(a)\mu(b)=\mu(a\cdot 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(x\cdot y)=f(x)f(y)\), 则称 \(f(n)\) 为一个积性函数;若对于任意 \(x\)\(y\) 均有 \(f(x\cdot y)=f(x)f(y)\),则称 \(f(n)\) 为一个 完全积性函数

性质二
\[\displaystyle \sum_{d|n}\mu(d)=[n=1]\]

证明
\(n=1\) 时显然。

\(n\neq 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}\bigg(\mu(d)\cdot F\Big(\frac{n}{d}\Big)\bigg)\]

证明
\[\displaystyle \sum_{d|n}\bigg(\mu(d)\cdot F\Big(\frac{n}{d}\Big)\bigg)=\sum_{d|n}\bigg(\mu(d)\cdot \sum_{k|\frac{n}{d}}f(k)\bigg)=\sum_{k|n}\bigg(f(k)\cdot \sum_{d|\frac{n}{k}}\mu(d)\bigg)=f(n)\]
最后一步时根据莫比乌斯函数的性质二,可得当且仅当 \(k=n\) 时和式的值为 \(f(n)\),否则为 \(0\)

形式二
\[\displaystyle F(n)=\sum_{n|d}f(d)\implies f(n)=\sum_{n|d}\bigg(\mu\Big(\frac{d}{n}\Big)\cdot F(d)\bigg)\]

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

原博客

莫比乌斯反演

标签:org   bre   博客   处理   pre   表示   line   tps   break   

原文地址:https://www.cnblogs.com/Alessandro/p/9709025.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!