莫比乌斯反演
简介
莫比乌斯反演是数论上的一种处理技巧。对于一些函数 \(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)\)的定义域是\(N\)
- \(mu(1)=1\)
- 当n存在平方因子时,\(mu(n)=0\)
- 当n是素数或奇数个不同素数之积时,\(mu(n)=-1\)
- 当n是偶数个不同素数之积时,\(mu(n)=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)\) 为一个 完全积性函数
性质二:
证明:
当 \(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\),代入即可得证。
莫比乌斯反演
形式一:
证明
最后一步时根据莫比乌斯函数的性质二,可得当且仅当 \(k=n\) 时和式的值为 \(f(n)\),否则为 \(0\)。
形式二:
应用:
容斥原理,数论,杜教筛。