掌握莫比乌斯反演~彻底入门
Posted acgoto
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了掌握莫比乌斯反演~彻底入门相关的知识,希望对你有一定的参考价值。
莫比乌斯函数
$ Mobius $ 函数 $ \mu(n) $ 的定义:设 $ n = p_1^k_1 \times p_2^k_2 \times \cdots \times p_m^k_m $,其中 $ n > 1 $,且 $ p_i $ 为素数,则其定义如下:
$$
\mu(n) =
\left \ \beginaligned
&1 \quad (n = 1) \\
&(-1) ^k \quad n = \prod_i = 1^k p_i \\
&0 \quad otherwise
\endaligned \right.
$$
通俗理解:
① $ \mu(n) $ 的定义域为 $ n \in N^+ $;
② 规定:$ \mu(n) = 1 $;
③ 当 $ n $ 存在平方因子时,$ \mu(n) = 0 $;
④ 当 $ n $ 是一个素数或者为奇数个不同的素数之积时,$ \mu(n) = -1 $;
⑤ 当 $ n $ 是偶数个不同素数之积时,$ \mu(n) = 1 $。
性质:
1、$ Mobius $ 函数是一个数论函数,同时也是一个积性函数。
2、当 $ n > 0 $ 时,有如下定理:
$$
\sum_d|n \mu(d) =
\left\ \beginalign
&1 \quad (n = 1) \\
&0 \quad (n > 1)
\endalign\right.
$$
其证明如下:(用到了二项式定理的性质)
Ⅰ、当 $ n = 1 $ 时,显然等式成立!
Ⅱ、当 $ n > 1 $ 时,设 $ n = p_1^k_1 \times p_2^k_2 \times \cdots \times p_m^k_m $ ,$ d = p_1^x_1 \times p_2^x_2 \times \cdots \times p_m^x_m $ 。
根据 $ \mu $ 的定义,只需考虑 $ x_i = 0 $ 或者 $ x_i = 1 $ 的情况。假设 $ d $ 中存在 $ r $ 个 $ x_i = 1 $,那么有
$$
\beginalign
\sum_d|n \mu(d) =
& \mu(1) + \mu(p_1) + \cdots + \mu(p_k) + \mu(p_1 \times p_2) + \cdots + \mu(p_m-1 \times p_m) + \cdots + \mu(p_1 \times p_2 \times \cdots \times p_m) \\
= & 1 + \binomm1(-1) + \binomm2(-1)^2 + \cdots + \binommm(-1)^m = \sum_r=0^m \binommr(-1)^r = 0 \\
\endalign
$$
根据二项式定理有:$ (x + y)^n = \sum_k = 0^n \binomnk x^n - k \times y^k $, 令 $ x = 1, y = -1 $,
即可证得:$ \sum_r=0^m \binommr(-1)^r \times 1^m-r = (1 - 1)^m = 0 $。
卷积运算形式:$ \because \mu(n) \ast I(n) = \epsilon(n) $,其中 $ \mu(n) $ 为莫比乌斯函数,$ I(n) = 1 $ 为恒等函数,$ \epsilon(n) $为元函数,$ \epsilon(n) = [n == 1], \; \therefore \mu(n) \ast I(n) = \sum_d|n \mu(d) I(\fracnd) = \sum_d|n \mu(d) = [n == 1] $,即证!
3、$ \forall \;n \in \mathbbN^+ $,有 $ \frac\varphi(n)n = \sum_d|n \frac\mu(d)d $。利用卷积的性质来证明:$ \because \varphi(n) = \mu(n) \ast id(n) = \sum_d \mid n \mu(d) \cdot id(\fracnd) = \sum_d \mid n \mu(d) \cdot \fracnd $,$ \therefore \frac\varphi(n)n = \sum_d|n \frac\mu(d)d $,即证!
备注:
a、若 $ f(n) $ 的定义域为正整数域,值域为复数,即:$ f: \mathbbZ^+ \to \mathbbC $,则称 $ f(n) $ 为数论函数。
b、若 $ f(n) $ 为数论函数,且 $ f(1) = 1 $,对于互质的正整数 $ p, q $,有 $ f(p \cdot q) = f(p) \cdot f(q) $,则称其为积性函数。
c、若 $ f(n) $ 为积性函数,且对于任意的正整数 $ p, q $ 都有 $ f(p \cdot q) = f(p) \cdot f(q) $ ,则称其为完全积性函数。
线性筛求莫比乌斯函数
1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long LL; 4 5 const int maxn = 1e5+5; 6 7 int cnt, prime[maxn], mu[maxn]; 8 bool isp[maxn]; 9 10 void Mobius() 11 memset(isp, false, sizeof(isp)); 12 memset(mu, 0, sizeof(mu)); 13 memset(prime, 0, sizeof(prime)); 14 isp[0] = isp[1] = true; 15 cnt = 0; 16 mu[1] = 1; 17 for(int i = 2; i < maxn; ++i) 18 if(!isp[i]) prime[cnt++] = i, mu[i] = -1; 19 for(int j = 0; j < cnt && i * prime[j] < maxn; ++j) 20 isp[i * prime[j]] = true; 21 if(i % prime[j] == 0) 22 mu[i * prime[j]] = 0; 23 break; 24 25 mu[i * prime[j]] = - mu[i]; 26 27 28 29 30 int main() 31 // Test: 32 Mobius(); 33 for(int i = 1; i <= 10; ++i) 34 cout << "mu[" << i << "]:" << mu[i] << endl; 35 36 return 0; 37
证明如下:
设 $ p_1 $ 为 $ n $ 的最小素因子,$ n‘ = \fracnp_1 $,在线性筛中,$ n $ 通过 $ n‘ \times p_1 $ 被筛掉。
Ⅰ、当 $ n $ 为素数时,根据定义有显然有 $ \mu(n) = -1 $;
Ⅱ、当 $ n‘ \mod p_1 = 0 $ 时,即其对应的指数 $ k_1 > 1 $,由定义得 $ \mu(n) = 0 $;
Ⅲ、当 $ n‘ \mod p_1 \neq 0 $,即 $ k_1 = 1 $,$ n‘ $ 有 $ m - 1 $ 个素因子,接下来分2种情况讨论:
ⅰ、若 $ \mu(n‘) \neq 0 $,即 $ n‘ $ 的所有素因子都只有一个,根据定义 $ \mu(n) = (-1)^m = (-1)^m-1 \times (-1) = - \mu(n‘) $;
ⅱ、若 $ \mu(n‘) \neq 0 $,说明 $ \prod_i=2^m k_i > 1 $,根据定义,显然有 $ \mu(n) = 0 $。
综合以上2小点, $ \mu(n) = -\mu(n‘) $ 仍然成立。即证!
欧拉函数性质的补充及其证明
公式:$ n = \sum_d \mid n \varphi(d) $。
证明用到法里级数:法里级数 $ n $ 定义为分母不大于 $ n $ 的最简分数。
举个栗子:当分母 $ n = 12 $ 时,分子 $ 1 \sim 12 $ 对应的最简分式依次为
$ \frac112 $、$ \frac16 $、$ \frac14 $、$ \frac13 $、$ \frac512 $、$ \frac12 $、$ \frac712 $、$ \frac23 $、$ \frac34 $、$ \frac56 $、$ \frac1112 $、$ \frac11 $。
观察以上最简分式可以发现分母都是 $ n = 12 $ 的因子 $ d = \1, 2, 3, 4, 6, 12 \ $,即 $ d \mid n $。
将以上最简分式分类可得:
①分母为1的最简分式有:$ \frac11 $;$ \Rightarrow \varphi(1) = 1 $。
②分母为2的最简分式有:$ \frac12 $;$ \Rightarrow \varphi(2) = 1 $。
③分母为3的最简分式有:$ \frac13 $,$ \frac23 $;$ \Rightarrow \varphi(3) = 2 $。
④分母为4的最简分式有:$ \frac14 $,$ \frac34 $;$ \Rightarrow \varphi(4) = 2 $。
⑤分母为6的最简分式有:$ \frac16 $,$ \frac56 $;$ \Rightarrow \varphi(6) = 2 $。
⑥分母为12的最简分式有:$ \frac112 $,$ \frac512 $,$ \frac712 $,$ \frac1112 $;$ \Rightarrow \varphi(12) = 4 $。
通过分类可以发现对于同一个作为分母的因子 $ d $,其分子都是 $ d $ 内且与 $ d $ 互质的数,个数为 $ \varphi(d) $,显然 $ \sum_d|n \varphi(d) = n $。不难推导,对任意的 $ n \in \mathbbN^+ $,等式恒成立。
另一种证明方式:当 $ n > 2 $ 时,令 $ n = \prod \limits_i = 1^m p_i^k_i $,由于欧拉函数是积性函数,那么 $ \varphi(n) = \prod \limits_i = 1^m \varphi(p_i^k_i) $,则
$$
\sum \limits_d \mid n \varphi(d) = \sum \prod \limits_i = 1^m \varphi(p_i^j),其中 \; (0 \leq j \leq k_i)
$$
将上式因式分解可得
$$
\beginaligned
\prod \limits_i = 1^m (\sum \limits_j = 0^k_i \varphi(p_i^j)) & = \prod \limits_i = 1^m (1 + \sum \limits_j = 1^k_i (p_i^j - p_i^j - 1)) \\
& = \prod \limits_i = 1^m (1 + \fracp_i(p_i^k_i-1)p_i-1-\fracp_i^k_i-1p_i-1) \\
& = \prod \limits_i = 1^m (1 + \fracp_i^k_i(p_i-1)-(p_i-1)p_i-1) \\
& = \prod \limits_i = 1^m (1 + p_i^k_i - 1) \\
& = \prod \limits_i = 1^m p_i^k_i = n
\quad\Box
\endaligned
$$
卷积运算形式:$ \because id(n) = \varphi(n) \ast I(n) $,其中 $ id(n) = n $ 为单位函数,$ I(n) = 1 $ 为恒等函数,$ \therefore id(n) = \sum_d \mid n \varphi(d) I(\fracnd) = \sum_d \mid n \varphi(d) = n $,即证!
备注:
法里数列(级数):数学上,n阶的法里数列是0和1之间最简分数的数列,由小至大排列,每个分数的分母不大于n。每个法里数列从0开始,至1结束,但有些人不把这两项包括进去。有时法里数列(sequence)也称为法里级数(series),严格来说这名字不正确,因为法里数列的项不会加起来。
整除分块
问:求 $ \sum_i=1^n \left \lfloor \fracni \right \rfloor $,$ n \leq 10^12 $?
解:~~冷静分析一下~~,通过~~暴力打表~~可以发现对于每一个 $ \left \lfloor \fracni \right \rfloor $ ,有若干个与其相同的值,这样相同的值组成一个块。对于每一个块,假设左端点值是 $ lt $,那么右端点值为 $ \left \lfloor \fracn\fracnlt \right \rfloor $。于是,这个问题就可以在 $ O(\sqrtn) $ 的时间复杂度内轻松解决!
证明如下:
Ⅰ、$ \left \lfloor \fracni \right \rfloor $ 最多有 $ 2 \times \sqrtn $ 种取值。即整除分块的时间复杂度为 $ O(\sqrtn) $。理由如下:
ⅰ、当 $ i \leq \sqrtn $,显然只有 $ \sqrtn $ 种取值;
ⅱ、当 $ i > \sqrtn $ 时,即 $ \fracni < \sqrtn $,显然也只有 $ \sqrtn $ 种取值。
Ⅱ、假如 $ \lfloor \fracnlt \rfloor = \lfloor \fracnrt \rfloor $,那么 $ rt $ 的最大值为 $ \left \lfloor \fracn\lfloor \fracnlt \rfloor \right \rfloor $。理由如下:
设 $ \lfloor \fracnlt \rfloor = k $,则有 $ k \times lt + p = n $,其中余数 $ p \in [0,lt) $;
若 $ \left \lfloor \fracnlt+d \right \rfloor = k $,则有 $ k \times (lt+d)+p‘=n $;其中余数 $ p‘ \in [0,lt+d) $
联立上面2个等式可得 $ p‘=p-kd $;当 $ p‘ = 0 $ 时,$ d_max = \left \lfloor \fracpk \right \rfloor $;则有如下推导:
$$
\beginaligned
rt
& = lt + d_max \\
& = lt + \lfloor \fracpk \rfloor \\
& = lt + \left \lfloor \frac n \; mod \; lt\lfloor \fracnlt \rfloor \right \rfloor \\
& = lt + \left \lfloor \frac n -\lfloor \fracnlt \rfloor \times lt\lfloor \fracnlt \rfloor \right \rfloor \\
& = \left \lfloor lt + \frac n- \lfloor \fracnlt \rfloor \times lt\lfloor \fracnlt \rfloor \right \rfloor \\
& = \left \lfloor \frac\lfloor \fracnlt \rfloor \times lt\lfloor \fracnlt \rfloor + \frac n - \lfloor \fracnlt \rfloor \times lt\lfloor \fracnlt \rfloor \right \rfloor \\
& = \left \lfloor \fracn\lfloor \fracnlt \rfloor \right \rfloor
\quad\Box
\endaligned
$$
总结:通过以上证明可知每一个分块的区间为 $ [lt, \lfloor \fracn\lfloor \fracnlt \rfloor \rfloor] $。如何edit code?设初始值 $ lt = 1 $,每次令 $ rt = \left \lfloor \fracn\lfloor \fracnlt \rfloor \right \rfloor $,将 $ (rt - lt + 1) \times \lfloor \fracnlt \rfloor $ 累加到答案中,然后令 $ lt = rt + 1 $ 继续遍历下一个分块即可。由性质Ⅰ可知这样的块数最多为 $ 2 \sqrtn $ 个,即时间复杂度为 $ O(\sqrtn) $。即证!
Template code
1 LL Div_block(LL n) 2 LL res = 0; 3 for(LL lt = 1, rt; lt <= n; lt = rt + 1) 4 rt = n / (n / lt); 5 res += (rt - lt + 1) * (n / lt); 6 7 return res; 8
狄利克雷卷积
设 $ f(n) $、$ g(n) $ 是两个数论函数,其 $ Dirichlet $ (狄利克雷)乘积也是一个数论函数,则卷积运算 $ f \ast g $ 定义为:
$$
(f \ast g)(n) = \sum_d|n \;\land \;d > 0 f(d) \; g(\fracnd)
$$
简记为 $ (f \ast g)(n) = f(n) \ast g(n) $。注意:卷积运算符为 $ \ast $;而乘法运算为 $ \times $ 或者 $ \cdot $ 或者不写。
数论函数 $ f(n) $与 $ g(n) $ 的狄利克雷乘积也可以表示为
$$
(f \ast g)(n) = \sum_ab = n \; \land \; a, b > 0 f(a) \; g(b)
$$
卷积运算的性质:
Ⅰ、满足交换律:$ f \ast g = g \ast f $。由定义显然得证!
Ⅱ、满足结合律:$ (f \ast g) \ast h = f \ast (g \ast h) $,证明如下:考察两边作用在参数 $ n $ 上,则
$$
\beginaligned
左边=((f \ast g) \ast h)(n)
& = \sum_mk=n(f \ast g)(m)h(k) \\
& = \sum_mk=n \left(\sum_ij=mf(i)g(j) \right)h(k)\\
& = \sum_ijk=n f(i)g(j)h(k) = f \ast g \ast h
\endaligned
$$
$$
\beginaligned
右边 = (f \ast (g \ast h))(n)
& = \sum_im=nf(i)(g \ast h)(m) \\
& = \sum_im=nf(i) \left(\sum_jk=mg(j)h(k) \right) \\
& = \sum_ijk=n f(i)g(j)h(k) = f \ast g \ast h = 左边
\quad\Box
\endaligned
$$
以上是关于掌握莫比乌斯反演~彻底入门的主要内容,如果未能解决你的问题,请参考以下文章