zoukankan      html  css  js  c++  java
  • [学习笔记]μ函数

    省队集训看着台上的老师讲了一上午的莫比乌斯反演,整个人都是懵的,因为我看不清黑板和投影!!!

    回家后本来想晚上自学完的,却奈何自己是个拖延症患者,只敲了μ函数(说多了都是泪QAQ)

    代码的思路如下:

    1.算质因数个数时因为有将1算上,所以每次都需要将符号取反;

    2.为什么这样做能算出μ(a)=0呢?证明如下(如果有错可以指出,但别打我QAQ):

      ①先证明:已知a=p1×p2×p3×...×pn×pi(1<=i<=np为质数)

        则μ(a)=Σμ(i)(1<=i<=n)+Σμ(pipj)(1<=i<j<=n)(为什么不列举μ(pi2×...)呢?因为它的值是0,不影响结果)

        可以发现,上式中μ()值为±1的各有n(因为μ(pi2)=0),相抵消一下,μ(a)就等于0了。

      ②其次再证明:已知a=p1bp2bp3b3×...×pnbn(bi≠0max(bi)>1)μ(a)=0

        则令a'=p1b1×p2b2×p3b3×...×pnbn×pi(1<=i<=n)

        μ(a')=μ(a)=0,因为它们满足μ(j)≠0的因数j是一样的,所以μ()值也是一样的。

    3.最后证明|μ(i)|=1时,它的符号是正确的。

      已知a=p1p2p3...pnpn+1,a'=p1p2p3...pn,
      因为每次确定μ()时,都会对它的符号取反,所以μ(a')=-Σi(i|ai≠a),即μ(a')+Σi(i|ai≠a)=0
      设x=μ(pn+1)+Σμ(pn+1pi)(1<=i<=n)+Σμ(pn+1pipj)(1<=i<j<=n)+Σμ(pn+1pipjpk)(1<=i<j<k<=n)+...
      (x表示将pn+1分别跟p1-pn0、1、2、...(n-1)个不同的素数组合而成的μ值的和),则x=Σ(-1)i+1×c(i,n)(0<=i<=n-1)
      所以-μ(a)=x,即μ(a)=-x
      设x'=Σ(-1)i+1×c(i,n)(0<=i<=n)

      观察杨辉三角形得
      Σc(2i,n)(1<=i<=n/2)=Σc(2i+1,n)(0<=i<=(n-1)/2)=上一行所有数之和(如图箭头所示),正负互相抵消,故x'=0
      所以x=x'-(-1)n+1×c(n,n)=-(-1)n+1
      即μ(a)=-x=(-1)n+1,符合μ函数定义。

    时间复杂度:O(nlogn) 

    #define N 10000001
    int mu[N],n; inline void get_mu(){ for(int i=1;i<=n;i++){ if(i==1) mu[i]=1; else mu[i]=0-mu[i]; for(int j=i<<1;j<=n;j+=i) mu[j]+=mu[i]; } }
  • 相关阅读:
    推荐一本SQL经典书籍
    准备升级包包版游戏大厅
    《博客园精华集软件工程分册》第三轮筛选结果
    (翻译)《Expert .NET 2.0 IL Assembler》 第八章 基本类型和签名(一)
    如何输入人名间的顿号
    推荐一个下名人传记电子书的好地方
    asp.net 2.0 中使用web.config存储数据库连接字符串
    Asp.Net小技巧之在client端调用server端事件:
    C#编码好习惯
    把ip转换成对应的城市名
  • 原文地址:https://www.cnblogs.com/AireenYe/p/miu.html
Copyright © 2011-2022 走看看