莫比乌斯函数
WorldBest丶牛顿
2018-08-02 21:45:40
# 写在前面
因为本人太蒻了,所以本文会有大量抄袭痕迹 $qwq$
~~如有雷同,确实就是我抄的~~
**来源见最后**
# 定理
设 $F(x)$ 与 $f(x)$ 是定义在 $N^* $ 上的两个函数
满足
$$F(n)=\sum_{d|n}f(d)$$
则有
$$f(n)=\sum_{d|n}\mu(d)f(\frac{n}{d})$$
其中 $μ(d)$ 为莫比乌斯函数
------------
------------
# 莫比乌斯函数
由前提条件
$$F(n)=\sum_{d|n}f(d)$$
我们可知
$$\begin{cases} F(1)=f(1) \\ F(2)=f(1)+f(2) \\ F(3)=f(1)+f(3) \\ F(4)=f(1)+f(2)+f(4) \\ F(5)=f(1)+f(5) \\ F(6)=f(1)+f(2)+f(3)+f(6) \\ F(7)=f(1)+f(7) \\ F(8)=f(1)+f(2)+f(4)+f(8) \end{cases}$$
$$\Downarrow$$
$$\begin{cases} f(1)=F(1) \\ f(2)=F(2)-F(1) \\ f(3)=F(3)-F(1) \\ f(4)=F(4)-F(2) \\ f(5)=F(5)-F(1) \\ f(6)=F(6)-F(3)-F(2)+F(1) \\ f(7)=F(7)-F(1) \\ f(8)=F(8)-F(4) \end{cases}$$
我们可以发现,从 $F$ 逆向推 $f(n)$ 时,只需将与 $f(n)$ 有关的 $F$ 进行容斥
但是每个 $F(x)$ 的系数怎么确定呢?
我们设 $G(d,n)$ 表示求解$ F(n)$ 时, $f(d)$ 的系数
以 $F(6)$ 为例,可以得到这个式子
$$f(6)=G(6,6)* F(6)+G(2,6)* F(2)+G(3,6)* F(3)+G(1,6)* F(1)$$
我们将每个 $G$ 分别用 $a,b,c,d$ 代换,用含 $f$ 的式子代入 $F$
$$f(6)=a* (f(6)+f(3)+f(2)+f(1))+b* (f(2)+f(1))+c* (f(3)+f(1))+d* f(1)$$
移项,合并同类项,得到
$$f(6)* (a-1)+f(3)* (a+c)+f(2)* (a+b)+f(1)* (a+ b+c+d)=0$$
将$ f(6),f(3),f(2),f(1) $看做不同的元,可以得到系数方程组
$$\begin{cases} a-1=0 \\ a+c=0 \\ a+b=0 \\ a+b+c+d=0 \end{cases}$$
由此发现,只需要解出方程,就能知道对于 $F$ 的系数
那么对于每个 $ f(n) $ ,假设他的因子数为 $ m $ ,则通过这种方式,总能设出 $ m $ 个未知数,$ m $ 个方程,而这 $ m $ 个方程一定是有解的
------------
对于 $G$ ,我们可以证明一个结论
$$G(a,b)=G(1,\frac{b}{a})$$
**(温馨提示:以下需要强大的心算~~(YY)~~能力,想不通的话可以拿出纸笔或者打开 附件—画图 )**
以求解 $f(8)$ 为例,则有
$$f(8)=G(8,8)* F(8)+G(4,8)* F(4)+G(2,8)* F(2)+G(1,8)* F(1)$$
$$f(8)=G(8,8)* (f(1)+f(2)+f(4)+f(8))+G(4,8)* (f(1)+f(2)+f(4))+G(2,8)* (f(1)+f(2))+G(1,8)* f(1)$$
首先 $G(8,8)$ 的值可以直接确定,因为把 $f(8)$ 当作元的话,左边一个 $f(8)$ ,而在右边 $f(8)$ 只在 $F(8)$ 中出现,所以 $G(8,8)=1$
同理,对于 $\forall f(n)$ ,其 $F(n)$ 的系数 $G(n,n)=1$ ,所以 $G(8,8)=G(1,1)$
再看 $G(4,8)$ ,发现 $f(4)$ 在 $F(8)$ 和 $F(4)$ 出现,因为左边不含 $f(4)$ ,而前面 $F(8)$ 的系数又已经确定,所以这里 $G(4,8)* F(4)$ 的作用就是为了抵消前面 $F(8)$ 的代换中出现的$f(4)$,所以 $G(4,8)=-G(8,8)=-G(2,2)=G(1,2)$
($G(1,2)=-G(1,1)$留给读者自证(o(*////▽////*)q)
同理,对于 $G(2,8)$ ,他是为了抵消前面在 $F(8)$ 和 $F(4)$ 中出现的 $f(2)$ ,所以 $G(2,8)$ 相当于受到 $G(4,4)$ 和 $G(2,4)$ 的影响(假设这个结论对 $n=4$ 也成立,$G(2,4)=G(1,2)$),
所以 $G(2,8)=G(1,4)$
总结一下,假设 $n$ 的因子有 $d_1,d_2,d_3 \dots ,d_m$ 其中 $d_1>d_2>d_3 \dots >d_m$
我们依次确定 $G(d_i,n)$ 的值,当我们在确定 $G(d_i,n)$ 的值时,前面的值已经确定,即 $G(d_j,n)(j<i)$ 的值已经确定,
$G(d_i,n)$ 会受到前面一些 $G(d_j,n)$ 的影响,当且仅当 $d_j>d_i$ 且 $d_i|d_j$ 。
假设 $G(a,b)=G(1,\frac{b}{a})$ 对前面的 $G(d_j,n)$ 和所有的 $G(k,m)$ 其中 $m<n$ 已经成立(首先对于 $G(n,n)$ 已经成立),那么有
$$G(d_j,n)=G(1,\frac{n}{d_j})=G(\frac{d_j}{d_i},\frac{n}{d_i})$$
这样就把前面对 $G(d_i,n)$ 造成影响的 $G$ 由 $G(d_j,n)$ 转为了 $G(\frac{d_j}{d_i},\frac{n}{d_i})$ ,所以$G(d_i,n)$ = $G(1,\frac{n}{d_i})$
既然 $G(a,b)$ 可以写成 $G(1,\frac{b}{a})$,那么我们就可以把 $G$ 的第一个元素省略,简写为 $G(n)$
说到这里,就可以把 $G$ 和 $\mu$ 联系起来了,其实
$$\mu(n)=G(n)= G(1,n)$$
于是,我们就可以给 $\mu(n)$ 赋予一个更具体的意义: $\mu(n)$ 表示在计算 $f(n)$ 时,$F(1)$的系数!!(因为 $\mu(n)=G(1,n)$ )
------------
首先需要明确2点!
一、$F(n)$ 中,一定包含一个 $f(1)$,因为 $1|n$
二、$f(1)=F(1)$
下面开始推理:
(1) 如果 $n=1$ ,因为 $f(1)=F(1)$,所以
$$\mu(1)=1$$
------------
(2) 假设 $n$ 是一个质数
$$f(n)=\mu(1)* F(n)+\mu(n)* F(1)$$
代入 $\mu(1)=1$ , 因为 $F(n)$ 中含有一个 $f(1)$ ,而左边不含 $f(1)$ ,所以我们需要利用 $F(1)$ 来消去 $f(1)$
所以
$$\mu(n)=-1$$
(3) 假设 $n$ 可以写成两个不同质数的乘积 $n=pq$
那么
$$f(n)=\mu(1)* F(pq)+\mu(q)* F(p)+\mu(p)* F(q)+\mu(n)* F(1)$$
这里 $\mu(1)$,$\mu(p)$,$\mu(q)$ 就是前面两种情况
代入系数,因为左边没有 $f(1)$,所以为了抵消右边的 $f(1)$ ,我们需要令
$$\mu(n)=1$$
(4) 假设 $x$ 可以写成三个不同质数的乘积 $x=p*p1*p2$ 我们令 $z=p1*p2$
$$f(n)=\mu(1)* F(pz)+\mu(z)* F(p)+\mu(p)* F(z)+\mu(n)* F(1)$$
其中 $\mu(1),\mu(p),\mu(z)$ 分别为前面三种情况,代入过后 ,为抵消 $f(1)$ 得到
$$\mu(n)=-1$$
由此可以相同的方式向下递推,得到**第一条结论**
如果 $n=p_1p_2\cdots p_k$ , 其中$p_i$是互异的质数,那么
$$\mu(n)=(-1)^k$$
------------
(5) 假设 $n$ 可以写成一个质数的平方 $n=p^2$
$$f(n)=\mu(1)* F(n)+\mu(p)* F(p)+\mu(n)*F (1)$$
代入系数,得到
$$\mu(n)=0$$
(6) 假设 $n$ 可以写成一个质数的三次方 $n=p^3$
$$f(n)=\mu(1)* F(n)+\mu(p)* F(p^2)+\mu(p^2)* F(p)+\mu(n)* F(1)$$
代入系数后
$$\mu(n)=0$$
由此可用相同方式向下递推,得到**第二条结论**
如果 $n=p^k(k>1)$
$$\mu(n)=0$$
(7) 假设 $n$ 可写成 $n=p^k* q$ 其中 $p,q$ 为不同质数,$k>1$
$$f(n)=\mu(1)* F(n)+\mu(q)* F(p^k)+\mu(p^k)* F(q)+\mu(n)* F(1)$$
代入系数后 $\mu(n)=0$
由此可继续向下递推,得到**第二条结论的加强版**
如果 $n=p^kz$,其中 $p$ 为质数, $z$ 为任意数, $k>1$ ,那么
$$\mu(n)=0$$
------------
### 总结:
$$\mu(n)=\begin{cases} 1\qquad ,n=1 \\ (-1)^k,n=p_1p_2p_3\cdots p_k \\ 0\qquad ,n=p^kz(k>1) \end{cases}$$
本处大量借鉴归纳~~(抄袭)~~了[此博客](https://www.cnblogs.com/chenyang920/p/4811995.html)的内容,有兴趣的可以去看看
------------
------------
# 莫比乌斯函数的特性
### 性质一
$$\sum_{d|n}\mu(d)=[n==1]$$
其中 $[n==1]$ 为布尔型,即条件为 $true$ 时值为 $1$ ,为 $false$ 时值为 $0$
证明:
① $n=1$,显然成立
② $n>1$,
设 $n=p_1^{k1}p_2^{k2}p_3^{k3}\cdots p_m^{km}$
$d$ 有其中一部分
∴ $d$ 的每个质因子指数为1时才有贡献,否则 $\mu(d)=0$
设 $d$ 中有 $r$ 个质因子
$\mu(d)=(-1)^r$,这样的 $d=C_m^r$
根据二项式定理可得
$$\sum_{r=0}^{m}(-1)^rC_m^r=\sum_{r=0}^{m}C_m^r(-1)^r* 1^{m-r}=(-1+1)^m=0$$
### 性质二
$$\text{若}(p,q)=1$$
$$\mu(p)* \mu(q)=\mu(p* q)$
因 $\mu$ 为积性函数,因此显然成立
### 性质三
$$\sum_{d|n}\frac{\mu(d)}{d}=\frac{\phi(n)}{n}$$
------------
------------
# 求出莫比乌斯函数
根据莫比乌斯函数的定义,我们可以通过调整欧拉筛,在线性的时间内求出 $\mu$
代码:
```cpp
void make_miu(int n)//求出从1到n的μ值
{
miu[1]=1;
for(int i=2;i<=n;++i)//欧拉筛
{
if(!vis[i])
{
miu[i]=-1;//i为质数,则μ[i]=-1
prime[++cnt]=i;
}
for(int j=1;j<=cnt&&prime[j]*i<=n;++j)
{
vis[prime[j]*i]=true;
if(i%prime[j]==0) break;
else miu[prime[j]*i]=-miu[i];
//目前prime[j]*i的质因子为j的质因子数+1
}
}
}
```
其实还有更快的方法求,需要使用杜教筛