前言?

终于放假了~~感觉再不趁机颓会儿我博客就废了……

赶紧写点东西刷刷存在感(骗点积分

莫比乌斯函数

 定义一种函数$\mu(d)$,满足:

1.若$d=1$,则$\mu(d)=1$。

2.若$d=p_1p_2p_3\cdots p_k$且$p_i$为互异素数时,$\mu(d)=(-1)^k$。

3.其他情况$\mu(d)=0$。

那么我们将函数$\mu(d)$称作莫比乌斯函数。

看上去很NB?

通俗一点,就是对于1来说$\mu(1)=1$,其他数的话若数d包含相同质因子则$\mu(d)=0$,若质因子各不相同,那么若x有奇数个质因子$\mu(d)=-1$,否则$\mu(d)=1$。

 莫比乌斯函数有许多神奇的性质(就知道两个):

性质一:$\sum\limits_{d|n}\mu(d) = [n==1]$

证明:

[n==1]意思就是当且仅当n=1时返回1,否则返回0。

$n=1$时显然成立。

$n \neq 1$时,首先对于$\mu(d)=0$的情况我们可以直接忽略,只需考虑$\mu(d)\neq 0$,即$d=p_1^{c_1}p_2^{c_2}\cdots p_k^{c_k}$且对于$\forall i\in [1,k]\ c_i=1$的情况。

 设$n=p_1^{c_1}p_2^{c_2}\cdots p_i^{c_i}$,则d的质因子个数是j的情况一共有$C_i^j$种。

那么根据莫比乌斯函数的定义我们可以得到\begin{array}{lcl}\sum\limits_{d|n}\mu(d) & = & C_i^0-C_i^1+C_i^2-\cdots +(-1)^iC_i^i \\& = & \sum\limits_{j=0}^i(-1)^jC_i^j \end{array}

就是说我们只需要证明$\sum\limits_{j=0}^i(-1)^jC_i^j = 0$就可以了。

这个东西就是个裸的二项式定理,不会二项式定理的话可以参考我的另一篇博客又开始骗阅读了)。

于是我们就愉快的证明出了性质一。

性质二:$\sum\limits_{d|n}\frac{\mu(d)}{d}=\frac{\phi(n)}{n}$

其中$\phi(n)$为欧拉函数(来看莫比乌斯反演的应该不会不知道吧……)。

这个性质会在下面讲狄利克雷卷积时证明。

求法:

求单个数的莫比乌斯函数直接分解质因数即可。

若求1~n项的莫比乌斯函数值,我们可以用Eratosthenes筛法计算。

#include<cstdio>
using namespace std;
int const N=1e5+5;
int miu[N];
bool v[N];
inline void get_miu(int n){
    for(register int i=1;i<=n;++i)
        miu[i]=1;
    for(register int i=2;i<=n;++i){
        if(v[i])continue;
        miu[i]=-1;
        for(register int j=i<<1;j<=n;j+=i){
            v[j]=1;
            if((j/i)%i)miu[j]=-miu[j];
            else miu[j]=0;
        }
    }
    return ;
}
int main(){
    int n;
    scanf("%d",&n);
    get_miu(n);
    return 0;
}
View Code

相关文章:

猜你喜欢
  • 2022-12-23
  • 2021-06-22
  • 2021-12-08
  • 2021-10-08
相关资源
相似解决方案