zoukankan      html  css  js  c++  java
  • 【数论】莫比乌斯函数

    莫比乌斯函数

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

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

    好了,步入正题吧……

           我们定义一个函数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

                                               ……

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

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

  • 相关阅读:
    scikit-learn与数据预处理
    TensorFlow2.0(11):tf.keras建模三部曲
    机器学习回顾篇(11):支持向量机(SVM)
    机器学习回顾篇(10):感知机模型
    TensorFlow2.0(10):加载自定义图片数据集到Dataset
    机器学习回顾篇(9):K-means聚类算法
    FRP代理及其在数据库安全上的实践
    Elasticsearch系列---实战零停机重建索引
    Elasticsearch系列---索引管理
    Elasticsearch系列---搜索执行过程及scroll游标查询
  • 原文地址:https://www.cnblogs.com/wxjor/p/5933213.html
Copyright © 2011-2022 走看看