「莫比乌斯反演」

引入

在考虑一个函数\(F(n)=\sum\limits_{d|n}f(d)\)时,假设已知函数\(F\),能不能通过若干\(F(i)\)的加减得到\(f(j)\)呢?找规律后发现好像可以,并且好像用到的\(i\)都是\(j\)的因数。由此我们能不能通过给每个因子的\(F\)乘上一个系数,可以是0或1或-1,这样来得到\(f(j)\)呢?也就是,我们猜想是否有一个函数\(\mu\)能够使得\(f(n)=\sum\limits_{d|n}\mu(d)F(\dfrac{n}{d})\)呢?我们称这个过程为反演,其中\(\mu\)就是莫比乌斯函数。

莫比乌斯反演

假设反演的式子\[F(n)=\sum\limits_{d|n}f(d) \xrightarrow[]{反演} f(n)=\sum\limits_{d|n}\mu(d)F(\dfrac{n}{d})\]成立
我们看看能不能推出\(\mu\)

\[f(n)=\sum\limits_{d|n}\mu(d)F(\dfrac{n}{d})=\sum\limits_{d|n}\mu(d)\sum\limits_{i|\frac{n}{d}}f(i)=\sum\limits_{d|n}f(d)\sum\limits_{i|\frac{n}{d}}\mu(i)\]

如果要使得上式成立,那么\[\sum\limits_{i|\frac{n}{d}}\mu(i)=[\dfrac{n}{d}==1]\]

也就是\[\sum\limits_{i|n}\mu(i)=[n==1]\]

于是我们定义了莫比乌斯函数。

莫比乌斯函数\(\mu\)的定义

\[\sum\limits_{i|n}\mu(i)=[n==1]\]

莫比乌斯函数的性质

[ 性质 1 ] \(\mu(d)=\begin{cases}1& d=1\\(-1)^k& d=p_1*p_2*...*p_k\\0& otherwise\end{cases}\)

证明:

假设这个性质成立,那么来证明莫比乌斯函数的定义\[\sum\limits_{i|n}\mu(i)=[n==1]\]

\(n=1\)时显然。

\(n>1\)时,将\(n\)分解质因数得\(n=p_1^{y_1}*p_2^{y_2}*...*p_k^{y_k}\)。任何一个质数的个数超过\(1\)时莫比乌斯函数值一定为\(0\),可以不管。我们只需要考虑有多少个质因数的质因数指数都为\(1\)。因此以上式子可以化为\[\sum\limits_{i=0}^{k}C^{i}_{k}*(-1)^i\]

利用二项式定理得\[\sum\limits_{i=0}^{k}\binom{k}{i}(-1)^i1^{k-i}=[(-1)+1]^k=0\]

[ 性质 2 ] \(\mu\)函数为积性函数:\(\mu(m*n)=\mu(m)*\mu(n)\) 其中\((m,n)=1\)

证明:

\(m=p_1^{x_1}*p_2^{x_2}*...*p_k^{x_k}\)\(n=q_1^{y_1}*q_2^{y_2}*...*q_t^{y_t}\)

\(m*n=p_1^{x_1}*p_2^{x_2}*...*p_k^{x_k}*q_1^{y_1}*q_2^{y_2}*...*q_t^{y_t}\)

\(\mu(m)=0或\mu(n)=0\)时,一定存在一个\(i\)满足\(x_i>1\)\(y_i>1\),因此\(\mu(m*n)=0\)成立

\(\mu(m),\mu(n)\)同号时,\(k,t\)奇偶性相同,则\(k+t\)为偶数,因此\(\mu(m*n)=1\)成立

\(\mu(m),\mu(n)\)异号时,\(k,t\)奇偶性不同,则\(k+t\)为奇数,因此\(\mu(m*n)=-1\)成立


求莫比乌斯函数

求积性函数一般用欧拉筛。复杂度\(O(n)\)

inline void getMobius(){
    mu[1] = 1; //μ函数的1是特殊情况 
    for(int i = 2; i <= 1e6; ++i){
        if(!b[i]){
            prime[++tot] = i;
            mu[i] = -1; //质数的μ值一定为-1 
        }
        for(int j = 1; j <= tot; ++j){
            if(i * prime[j] > 1e6) break;
            b[i * prime[j]] = 1;
            if(i % prime[j] == 0){
                mu[i * prime[j]] = 0;//i中已经包括了prime[j] 
                break;
            }
            else{
                mu[i * prime[j]] = -mu[i];//不能整除,意味着i中原没有prime[j]这个素因子 
            }
        }
    }
}

莫比乌斯反演公式

根据定义,有:

[ 公式 1 ]:\[F(n)=\sum\limits_{d|n}f(d) \xrightarrow[]{反演} f(n)=\sum\limits_{d|n}\mu(d)F(\dfrac{n}{d})\]

[ 公式 2 ]:\[F(n)=\sum\limits_{n|d}f(d) \xrightarrow[]{反演} f(n)=\sum\limits_{n|d}\mu(\dfrac{d}{n})F(d)\]


## 问题一

\[\sum\limits_{i=1}^{A}\sum\limits_{j=1}^{B}[gcd(i,j)==k]\]

解:

\[f(x)=\sum\limits_{i=1}^{A}\sum\limits_{j=1}^{B}[gcd(i,j)==x]\]

显然\(f(k)\)即为答案。

构造\[F(x)=\sum\limits_{x|d}f(d)\]

\[F(x)=\sum\limits_{x|d}\sum\limits_{i=1}^{A}\sum\limits_{j=1}^{B}[gcd(i,j)==d]\]\[=\sum\limits_{i=1}^{A}\sum\limits_{j=1}^{B}[x|gcd(i,j)]\]

由反演得\[f(x)=\sum\limits_{x|d}\mu(\dfrac{d}{x})F(d)\]

则答案为\[f(k)=\sum\limits_{k|d}\mu(\dfrac{d}{k})F(k)\]

考虑\(F(x)\)的意义,是所有数对中\(x\)的倍数的个数。可以推出\(F(x)=\left \lfloor \dfrac{A}{x} \right \rfloor \cdot \left \lfloor \dfrac{B}{x} \right \rfloor\)

由此\[f(k)=\sum\limits_{k|d}\mu(\dfrac{d}{k})\left \lfloor \dfrac{A}{k} \right \rfloor \cdot \left \lfloor \dfrac{B}{k} \right \rfloor\] \[f(k)=\sum\limits_{i}\mu(i)\left \lfloor \dfrac{A}{k} \right \rfloor \cdot \left \lfloor \dfrac{B}{k} \right \rfloor\]

所谓整除分块,就是用一种方法在\(O(\sqrt{n})\)的复杂度内求出\[\sum\limits_{i=1}^{n}\left \lfloor \dfrac{n}{i} \right \rfloor\]我们发现当\(i\)接近时,有可能有很多重复的值。整除分块的思想就是将所有重复的数值一起计算。

可以证明总共有不超过\(2\sqrt{n}\)个取值。也可以证明值为\(i\)的最后一个分母是第\(N\) / \((N\)/\(i)\)个。因此只需要每次取一段区间,然后将指针跳到下一个区间即可

回看莫比乌斯反演。假如我们得出了形如这样的反演式子\[f(n)=\sum\limits_{n|d}^{Min(A,B)}\mu(\dfrac{d}{n})\left \lfloor \dfrac{A}{n} \right \rfloor * \left \lfloor \dfrac{B}{n} \right \rfloor\]现在有两个整除的式子了,如何利用整除分块进行优化?

那么依然利用单个整除式的思想。每一个块要求\(\left \lfloor \dfrac{A}{n} \right \rfloor\)\(\left \lfloor \dfrac{B}{n} \right \rfloor\)都相同。因此我们每次应当跳到单独的区间靠前的那个,这样才能满足两者数值相同

现在唯一的问题就是处理\(\mu\)了,\(\mu\)的值不是连续的,如果能够通过一种方法将\(\mu\)转化为一个类似前缀和的东西,就可以直接计算了。

对该式进行恒等变换。令\(k=\dfrac{d}{n}\)\[\sum\limits_{n|d}\mu(k)\left \lfloor \dfrac{A}{nk} \right \rfloor * \left \lfloor \dfrac{B}{nk} \right \rfloor\]其实\(k\)的意义就是\(d\)\(n\)的几倍,因此不再需要枚举\(d\),直接枚举\(k\)即可,范围是\(nk \leq Min(A,B)\)。不妨将\(A,B\)都除上\(n\)。即\(A'=\dfrac{A}{n},B'=\dfrac{B}{n}\)\[\sum\limits_{k=1}\mu(k)\left \lfloor \dfrac{A'}{k} \right \rfloor * \left \lfloor \dfrac{B'}{k} \right \rfloor\]

至此,\(\mu\)已经和除式同步。因此只需要预处理\(\mu\)的前缀和即可

猜你喜欢

转载自www.cnblogs.com/qixingzhi/p/11137551.html