莫比乌斯函数
莫比乌斯函数!?提到这个东西你会不会想到一个大神级的玩意:莫比乌斯反演
莫比乌斯函数其实很简单,非常非常简单……
好了,步入正题吧……
我们定义一个函数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
……
于是我们只需要将它反过来,就可以求解容斥原理啦!
还有求逆元的一些各种用途,有兴趣的同学可以看看。