初始莫比乌斯反演
•参考资料
[1]:莫比乌斯函数
[2]:线性筛与积性函数(by 贾志鹏)
[4]:莫比乌斯反演简要笔记
[5]:初涉莫比乌斯反演(附带例题)
•积性函数
如果函数 $f$ 满足对于任意互质的正整数 $a,b$,都有 $f(ab)=f(a)\cdot f(b)$,则函数 $f$ 被称为积性函数;
欧拉函数 $\psi (x)$ 便是一个典型的积性函数;
•莫比乌斯函数的定义
假设 $n=p^{k_1}p^{k_2}\cdots p^{k_x}$;
那么,莫比乌斯函数 $\mu(n) $ 定义如下:
$\mu(n)=\begin{cases} \ \ 1 \ \ ,\ n=1 \\ -1^x\ ,\ \forall i\in[1,x],k_i=1 \\ \ \ 0 \ \ ,\ others \end{cases}$;
•莫比乌斯函数的性质
性质1:
莫比乌斯函数为积性函数,即满足 $GCD(a,b)=1\ ,\ \mu(ab)=\mu(a)\cdot \mu(b)$
根据这个性质,可通过欧拉筛在 O(n) 的时间复杂度内求解出 $\mu(1),\mu(2),\cdots,\mu(n)$;
求解如下:
1 int mu[maxn]; 2 vector<int >prime; 3 bool isPrime[maxn]; 4 5 void preCalc(int n)///O(n)预处理出mu[1,n-1] 6 { 7 mem(isPrime,true); 8 prime.clear(); 9 isPrime[1]=false; 10 mu[1]=1;///初始化mu[1]=1; 11 12 for(int i=2;i < n;++i) 13 { 14 if(isPrime[i]) 15 { 16 mu[i]=-1;///素数的莫比乌斯函数值为-1 17 prime.push_back(i); 18 } 19 20 int tmp; 21 for(int j=0;j < prime.size() && (tmp=i*prime[j]) < n;++j) 22 { 23 isPrime[tmp]=false; 24 mu[tmp]=-mu[i];///tmp相当于在i的基础上增加了一个素数prime[j] 25 26 if(i%prime[j] == 0)///prime[j]^2一定是tmp的因子,也就是说tmp至少含有一个平方因子 27 { 28 mu[tmp]=0;///含有平方因子的数的莫比乌斯函数值为0 29 break; 30 } 31 } 32 } 33 }性质2:
$\sum_{d|n} \mu(d)=[n=1]$
$[n=1]$ 指的是如果 $n=1$,那么式子 $\sum_{d|n} \mu(d)=1$,反之 $\sum_{d|n} \mu(d)=0$;
证明详见资料 [1] or [4];
•莫比乌斯反演
如果如果 $f(n), g(n)$ 是数论函数,且满足: $g(n)=\sum_{d|n}f(d)$
那么,由莫比乌斯反演可得 $f(n)=\sum_{d|n}\mu(d)g(\frac{n}{d})$;
注意一点,莫比乌斯反演并没有要求 $f(n),g(n)$ 为积性函数;
证明如下:
$\begin{aligned} \sum_{d|n}\mu(d)g(\frac{n}{d}) &= {\sum_{d|n}\mu(d)\sum_{k|\frac{n}{d}}f(k)}\cdots (1) \\ &= \sum_{d|n}\sum_{k|\frac{n}{d}}\mu(d)f(k)\cdots (2) \\ &=\sum_{k|n}\sum_{d|\frac{n}{k}}\mu(d)f(k)\cdots (3) \\ &=\sum_{k|n}f(k)\sum_{d|\frac{n}{k}}\mu(d)\cdots (4) \\ &=f(n)\cdots (5) \end{aligned}$
等式2转化到等式3的理解:
考虑到此处, $\sum \sum$ 的和号互换了,这一步该如何理解;
我是通过模拟一个例子理解的,并没有真正意义上的证明;
假设 n=12,那么每个 d 对应的 k 的取值如下:
$\begin{aligned} d&=\ 1:\{ 1,2,3,4,6,12\} \\ &=\ 2:\{ 1,2,3,\ ,6\} \\ &=\ 3:\{ 1,2,\ ,4\} \\&=\ 4:\{ 1,\ ,3\} \\&=\ 6:\{1,2\}\\&=12:\{1\}\end{aligned}$
你会发现,将 d,k 互换后,依然满足上述取值;
所以,和式 $\sum_{d|n}\sum_{k|\frac{n}{d}}$ 可转化为 $\sum_{k|n}\sum_{d|\frac{n}{k}}$;
等式4转化到等式5的理解:
由上述莫比乌斯函数的性质2可知,当且仅当 $\frac{n}{k}=1$ 时,有 $\sum_{d|\frac{n}{k}}\mu(d)=1$,其余情况都为0;
也就是说,只有当 $k=n$ 时取值 $f(n)$;
有关双重和式的转化,可以参考一下这几篇博客:
[1]:双重求和∑∑的定义及性质
[2]:交换和号∑∑的推导
•莫比乌斯反演变形
定义 $g(n)=\sum_{n|d}f(d)$,由莫比乌斯反演可得 $f(n)=\sum_{d|n}\mu(\frac{d}{n})g(d)$;
也可写成如下形式:
$g(n)=\sum_{i=1}^{x}f(i\cdot n)$,x 为上限,意味着 $d_{max}=x\cdot n$;
那么通过莫比乌斯反演可得到:
$f_n=\sum_{i=1}^{x}\mu(i)g(i\cdot n)$;
证明:
$\begin{aligned} \sum_{i=1}^{x}\mu(i)g(i\cdot n) &= \sum_{i=1}^{x}\mu(i)\sum_{j=1}^{x}f(j\cdot i \cdot n)\cdots (1) \\ &= \sum_{i=1}^{x}\sum_{j=1}^{x}\mu(i)f(j\cdot i \cdot n)\cdots (2)\\&=\sum_{i=1}^{x}\sum_{i|k}\mu(i)f(k\cdot n)\cdots (3) \\ &=\sum_{k}\sum_{i|k}\mu(i)f(k\cdot n)\cdots (4) \\&=\sum_{k}f(k\cdot n)\sum_{i|k}\mu(i)\cdots (5) \\&=f(n)\cdots (6) \end{aligned}$
第三步令 $k=j\cdot i$;
等式3转化到等式4的理解:
对于每一个 i ,都有若干个相应的 j 取值,如下:
$\begin{aligned} i&=1:\{1,2,3,\cdots x\} \\&=2:\{2,4,6,\cdots \} \\&=3:\{3,6,9,\cdots \} \\ &\cdots \cdots \end{aligned}$
很容易看出,对于 j 的取值,只有当 $i | j$ 时才会取到;
例如,如果 j 取值 4,那么,对应的 i 为 1,2,4 也就是 4 的因子;
等式5:当且仅当 $k=1$ 时,$\sum_{i|k}\mu(i) = 1$,也几乎是说等式5 = 等式6;
•莫比乌斯反演应用1
求满足 $\sum_{i=1}^{n}\sum_{j=1}^{m}GCD(i,j)=k$ 的 $(i,j)$ 的总个数;
定义 $f(k)=\sum_{i=1}^{n}\sum_{j=1}^{m}[GCD(i,j)=k]$;
定义 $g(k)=\sum_{i=1}^{n}\sum_{j=1}^{m} [k | GCD(i,j)]$;
由 $g(k)$ 的定义可得 $g(k)=\lfloor \frac{n}{k} \rfloor \cdot \lfloor \frac{m}{k} \rfloor$
易得 $\begin{aligned} g(k)&=f(k)+f(2k)+f(3k)+\cdots +f(x\cdot k)\\&=\sum_{i=1}^{x}f(i\cdot k)\end{aligned}$
其中 $x\cdot k \leq min(n,m)$,所以,上限 x 的范围为 $[1,\frac{min(n,m)}{k}]$;
由莫比乌斯反演可得:
$\begin{aligned} f(k)=&\sum_{i=1}^{x}\mu(i)g(i\cdot k) \\ =&\sum_{i=1}^{x}\mu(i)\cdot \lfloor \frac{n}{i\cdot k} \rfloor \cdot \lfloor \frac{m}{i\cdot k} \rfloor \end{aligned}$
所以,这道题分析到这儿,就经莫比乌斯反演,将时间复杂度降低到了 O(n);
这个时间复杂度 AC 这道题【HDU1695GCD】还是没有问题的;
但,这道题需要去重,即 $(i,j)$ 与 $(j,i)$ 算作一种情况;
其中很容易,定义 $Calc(n,m,k)=\sum_{i=1}^{n}\sum_{j=1}^{m}[GCD(i,j)=k]$;
定义 $t={min}(n,m)$,那么重复的部分就是 $\lfloor \frac{Calc(t,t,k)}{2} \rfloor$,减掉就好了;