初始莫比乌斯反演

 

•参考资料

  [1]:莫比乌斯函数

  [2]:线性筛与积性函数(by 贾志鹏)

  [3]:【算法讲堂】【电子科技大学】【ACM】莫比乌斯反演

  [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$,减掉就好了;

  HDU1695.cpp

 

posted @ 2019-09-22 19:18  HHHyacinth  阅读(244)  评论(0编辑  收藏  举报