首页 > 代码库 > 【数论】莫比乌斯函数

【数论】莫比乌斯函数

莫比乌斯函数

    莫比乌斯函数!?提到这个东西你会不会想到一个大神级的玩意:莫比乌斯反演

      莫比乌斯函数其实很简单,非常非常简单……

好了,步入正题吧……

       我们定义一个函数M,参数为x,函数内容如下:

       X=X1^P1*X2^P2*……*Xa^Xk

       那么这个式子到底是用来干什么的呢?

       我们使X1、X2、X3都存在一个素数集合中,那么它们必定都是素数

       则P1、P2、P3……为指数,因为对于任何数x(x>=2),都可以写成这种形式。

       比如我们举几个例子:

       12=3*4

       12=3*2*2

       12=2^2*3^1

        

       2=2

       2=2^1

       好,理解了这个我们设定P这个数组中间均>=1(小于1就没有意义了)

       我们先把这个x按如上方式分解

       我们设定,如果这里面的最大指数大于1了,那么我们的M(x)=0;

       如果最大指数等于1,则所有的指数都是1,从而M(x)=(-1)^k

       注意:M(1)=1!

       根据如上结论,M(x)=-1(x为素数)

                            M(x^n)=0(x为素数,n为大于1任意值)

        不难看出如上结论是正确的。

        因为如果x是一个素数的话,那么X1直接等于x,则P1直接为1,最终答案(-1)^1:-1

        如果这是一个素数的次方,那么那么X1直接等于x,p1赋值为n,如上n大于1,根据原理答案为0

        

那,它到底是干神马用的呢?

        我们发现,M(1)=1,M(2)=-1,M(3)=-1,M(5)=-1,M(6)=1,M(10)=1。

        有没有发现,能写成两个素数相乘的答案都是1

                          能写成三个素数相乘的答案都是-1

                                           ……

        于是我们只需要将它反过来,就可以求解容斥原理啦!

        还有求逆元的一些各种用途,有兴趣的同学可以看看。

【数论】莫比乌斯函数