莫比乌斯函数及反演学习笔记
前置知识\(1.\) 艾佛森括号:
\(=\begin{cases}1 & \mathtt{(if\ P\ is \ true)}\\0 & \mathtt{(otherwise)}\end{cases}\)
\(2.\) \(a\mid b\) 表示 \(a\) 是 \(b\) 的因子
\(3.\) 整除分块:\(\displaystyle\sum_{i=1}^n\lfloor\dfrac{N}{i}\rfloor\)
\(4.\) \(p\) 没有特殊说明时表示质数
\(5.\) \(\mathbb{P}\) 表示质数集,\(\mathbb{Z}\) 表示整数集。
\(6.\) 常见的函数:
[*]常函数:\(1(x)=1\)
[*]单位元函数:\(\epsilon(x)=\)
[*]恒等函数:\(Id_k(x)=x^k\)
[*]因子函数:\(d(x)=\displaystyle\sum_{i\mid x}1\)
[*]因子和函数:\(\sigma(x)_k=\displaystyle\sum_{i\mid x}i^k\)
[*]欧拉函数:\(\varphi(x)=\displaystyle\sum_{i=1}^x[\gcd(i,x)=1]\)
函数
数论函数
数论函数指一类定义域是正整数,值域是一个数集的函数。有:
[*]\((f+g)(x)=f(x)+g(x)\)
[*]\((x*f)(n)=x*f(n)\)
积性函数
当数论函数 \(f\) 对于 \(\gcd(n,m)=1\) 有:
\
则数论函数 \(f\) 为积性函数。
例如:\(d(x),\varphi(x)\)
完全积性函数
当积性函数 \(f\) 对于 \(\gcd(n,m)\not=1\) 仍有:
\
则积性函数 \(f\) 为完全积性函数。
例如:\(\epsilon(x),id_k(x)\)
狄利克雷卷积 (dirichlet)
定义两个函数 \(f(n)\) 和 \(g(n)\) 的狄利克雷卷积 \((f*g)(n)\) 其中 \(*\) 为卷积符号:
\
同时狄利克雷卷积满足以下一些性质:
[*]\(f*g=g*f\)
[*]\((f*g)*h=f*(g*h)\)
[*]\(f*h+g*h=(f+g)*h\)
[*]\((xf)*g=x(f*g)\)
[*]\(\epsilon*f=f\)
[*]对于每一个 \(f(1)\not=1\) 的函数 \(f\) 都有逆元 \(g\),使得 \(f*g=\epsilon\)
那么对于一个 \(f(1)\not=1\) 的函数 \(f\) 的逆元 \(g\) 该如何计算呢
我们只需要通过狄利克雷卷积的定义简单推导一下得到:
\-\displaystyle\sum_{i\mid n,i\not=1}f(i)g(\frac{n}{i})\right)\]
这样就有:\(\displaystyle\sum_{i\mid n}f(i)g(\dfrac{n}{i})=f(1)g(n)+\displaystyle\sum_{i\mid n,i\not=1}==\epsilon\)。
欧拉函数 (Euler)
定义
欧拉函数用 \(\varphi\) 表示,定义:
\[\varphi(n)=\displaystyle\prod_{i=1}^n[\gcd(i,n)=1]\]
解释:\(\varphi(n)\) 表示 \(1\sim n\) 中与 \(n\) 互质的数的个数。
公式
先设 \(n=\displaystyle\prod_{i=1}^kp_i^{t_i}\),则有:
\[\varphi(n)=n\displaystyle\prod_{i=1}^k\left(1-\dfrac{1}{p_i}\right)\]
证明:
我们先假设 \(n\in\mathbb{N^+}\) 只存在质因子 \(p,q\)。
考虑容斥,与 \(n\) 互质的数就是所有数减去 \(p,2p,\cdots,\lfloor\dfrac{n}{p}\rfloor,q,2q,\cdots,\lfloor\dfrac{n}{q}\rfloor\)。
同时根据容斥原理,需要补回 \(pq,2pq,\cdots,\lfloor\dfrac{n}{pq}\rfloor\)。
即 \(\varphi(n)=n-\dfrac{n}{p}-\dfrac{n}{q}+\dfrac{n}{pq}=n\left(1-\dfrac{1}{p}\right)\left(1-\dfrac{1}{q}\right)\)
那么同理,当 \(n=\displaystyle\prod_{i=1}^{k}p_i^{t_i}\) 时,有:
\[\varphi(n)=n\left(1-\dfrac{1}{p_1}\right)\left(1-\dfrac{1}{p_2}\right)\cdots\left(1-\dfrac{n}{p_k}\right)=n\displaystyle\prod_{i=1}^k\left(1-\dfrac{1}{p_i}\right)\]
积性函数
函数 \(\varphi\) 满足 \(\varphi(nm)=\varphi(n)\varphi(m)\ \ \ (\gcd(n,m)=1)\)。
即 \(\varphi\) 为积性函数。
证明:
设 \(n=\displaystyle\prod_{i=1}^kp_i^{a_i},m=\displaystyle\prod_{i=1}^tq_i^{b_i}\ \ \ (\gcd(n,m)=1)\)
\[\begin{aligned}\varphi(nm)= & nm\displaystyle\prod_{i=1}^k\left(1-\dfrac{1}{p_i}\right)\displaystyle\prod_{j=1}^t\left(1-\dfrac{1}{q_j}\right)\\= & n\displaystyle\prod_{i=1}^k\left(1-\dfrac{1}{p_i}\right)m\displaystyle\prod_{j=1}^t\left(1-\dfrac{1}{q_j}\right)\\ = & \varphi(n)\varphi(m)\end{aligned}\]
性质
\[\displaystyle\sum_{d\mid n}\varphi(d)=n\Leftrightarrow \varphi*1=Id\]
证明:
记 \(f(n)=\displaystyle\sum_{d\mid n}\varphi(d)\)。则由于:
\(f(n)f(m)=\displaystyle\sum_{i\mid n}\varphi(i)\displaystyle\sum_{j\mid n}\varphi(j)=\displaystyle\sum_{d\mid nm}\varphi(d)=f(nm)\)
可以得到 \(f(n)\) 为积性函数。
设 \(n=\displaystyle\prod_{i=1}^kp_i^{t_i}\)。
而对于 \(f(p^c)=\displaystyle\sum_{i=1}^c\varphi(p^i)=\displaystyle\sum_{i=1}^cp^i-p^{i-1}=p^c\)
\(\therefore f(n)=\displaystyle\prod_{i=1}^kf(p_i^{t_i})=\displaystyle\prod_{i=1}^kp_i^{t_i}=n\)
实现
我们可以通过线性筛筛质数的时候是顺便就把欧拉函数筛出来。
void Euler(int n){
phi=1;
for (int i=2;i<=n;i++){
if (!isp)primes.push_back(i),phi=i-1;
for(auto p:primes){
if(p*i>n)break;
isp=1;
if (!(i%p)){
phi=phi*p;
break;
}else phi=phi*phi;
}
}
}莫比乌斯函数 (Möbius)
定义
莫比乌斯函数用 \(\mu\) 表示,定义:
\[\mu(x)=\begin{cases}0 & x=1\\1 & \exists p\in\mathbb{Z},p^2\mid x\\(-1)^k & \displaystyle\prod_{i=1}^kp_i(1\le i,j\le j,p_i\not=p_j)\end{cases}\]
解释一下对 \(\mu(x)\) 的定义:
[*]当 \(x=1\) 时,\(\mu(x)=1\);
[*]当 \(x\) 含有任何的质因子的幂次 \(\ge 2\),\(\mu(x)=0\);
[*]当 \(x=\displaystyle\prod_{i=1}^kp_i\),且所有 \(p_i\) 的互不相同时,\(\mu(x)=(-1)^k\)
性质
只知道莫比乌斯函数的定义还远远不够,我们还需要了解一下他的性质:
[*]\(n\in\mathbb{N^+},\displaystyle\sum_{d\mid n}\mu(d)=,\mu*1=\epsilon\)。
证明:
当 \(n=1\) 时,\(\displaystyle\sum_{d|n}=\mu(1)=1=\)。
当 \(n>1\) 时,我们记 \(n=\displaystyle\prod_{i=1}^kp_i^{t_i}\)
当 \(\exists t_i,t_i>1\) 时,\(\mu(n)=0\)。
当 \(\forall t_i,t_i=1\) 时,对于 \(\mu(d)=(-1)^r\) 这样的存在 \(C_k^r\) 个。
\(\therefore \displaystyle\sum_{d\mid n}\mu(d)=C_k^0+C_k^1+C_k^2+\cdots+(-1)^kC_k^k=\displaystyle\sum_{i=0}^k(-1)^iC_k^i\)
由二项式定理:\((x+y)^n=\displaystyle\sum_{i=0}^nC_n^ix^iy^{n-i}\)
\(\therefore \displaystyle\sum_{d\mid n}\mu(d)=\displaystyle\sum_{i=0}^k(-1)^iC_k^i=(-1+1)^n=0\)
[*]\(\displaystyle\sum_{d\mid n}\dfrac{\mu(d)}{d}=\dfrac{\varphi(n)}{n}\)
证明:
\(\begin{aligned}\displaystyle\sum_{d\mid n}\dfrac{\mu(d)}{d}=&\displaystyle\sum_{d\mid n}\dfrac{\mu(d)\frac{n}{d}}{n}\\=& \dfrac{\displaystyle\sum_{d\mid n}\mu(d)Id\left(\frac{n}{d}\right)}{n}\\= & \dfrac{\mu(n)*Id(n)}{n}\end{aligned}\)
根据 \(\varphi*1=Id\Leftrightarrow\varphi*1*\mu=\mu*Id\Leftrightarrow\varphi*\epsilon=\mu*Id\) 得
\(\displaystyle\sum_{d\mid n}\dfrac{\mu(d)}{d}=\dfrac{\mu(n)*Id(n)}{n}=\dfrac{\varphi(n)}{n}\)
实现
和欧拉函数一样,也可以在筛质数的时候顺便得到。
void getMu(int n){ mu=1; isp=isp=1; for(int i=2;i
页:
[1]