zoukankan      html  css  js  c++  java
  • 【学习笔记】莫比乌斯反演

    前置知识:

    积性函数:

    对于互质整数(a) ,(b),如果有(f(a imes b)=f(a) imes f(b)) ,那么称(f(x))为积性函数,例如 (varphi,mu,sigma,d)

    而完全积性函数是对于任意的整数(a) , (b),有(f(a imes b)=f(a) imes f(b))的数论函数如 (epsilon,I ,id)

    Mobius 函数( μ ):

    (mu(n) = egin{cases} 1, & n = 1 \ (-1)^m, &n = prod_{i=1}^{n} space p_i \ 0, &otherwise end{cases})

    可以看出,$ μ(n) $ 恰在 (n) 无平方因子时取值非零。

    [egin{aligned} sum limits_{d | n} mu(d) = epsilon(n) end{aligned} Leftrightarrow epsilon = 1 ast mu ]

    可以线性筛

    inline void prework(){
            miu[1]=1; 
            for(int i=2;i<N;++i){
                if(!vis[i]) pri[cnt++]=i,miu[i]=-1;
                for(int j=0;j<cnt&&i*pri[j]<N;++j){}
                    vis[i*pri[j]]=1; if(i%pri[j]) miu[i*pri[j]]=-miu[i];
                    else{miu[i*pri[j]]=0; break;} 
                } miu[i]+=miu[i-1];
            } return ;
        }
    

    Dirichlet 卷积

    [h = f ast gLeftrightarrow h(n) = sum limits_{d | n} f(d) · g left( frac{n}{d} ight) Leftrightarrow h(n) = sum limits_{i · j = n} f(i) · g(j) ]

    同时 (epsilon) 函数是 (Dirichlet) 卷积的单位元,即 (f = f ast epsilon)

    常见的卷积式子有: (mu * I=epsilon,varphi * I= id,mu * id = varphi)

    Mobius 反演

    (f) 是数论函数,定义函数 (g) 满足

    [g(n) = sum limits_{d | n} f(d) ]

    则称 (g)(f)(Mobius) 变换。

    (f(x))也可以被表示为:

    [f(n)=sum_{d|n} mu(d)space g(frac{n}{d}) ]

    证明需要用到前面的性质

    其实就是个容斥,看看每个因子被加了几遍,然后加加减减就好了

    反演的公式用 (Dirichlet) 卷积表示即为 (g = f ast 1)

    推一下式子。

    [g = f ast 1Rightarrow f = f ast epsilon ]

    [f = f ast epsilon = f ast 1 ast mu = g ast mu ]

    (color{red} {g = f ast 1 Leftrightarrow f = g ast mu})

    推式子一般使用如下方式

    1.枚举 (gcd),除掉 (d)

    2.([gcd(i,j)=1] ightarrow sumlimits _ {d|i,d|j} mu(d))

    3.(T=dp) 然后提出来 (T)

    例题

    • 双亲数

      提出来 (gcd) 直接整除分块

      for(reg int l=1,r;l<=n;l=r+1){
      	r=n/(n/l); ...
      }
      
    • YY的GCD

      这个题的式子稍显复杂,使用第三个套路能得到朴素的整除分块式

    • 约数个数和

      首先用 (d(ij)=sum_{x|i}sum_{y|j} [gcd(x,y)=1]) 让式子只有函数 (mu)

      剩下需要预处理 (s(x)=sum_{i=1}^xlfloorfrac xi floor) 再前缀和一次

  • 相关阅读:
    ER/数据库建模工具之MySQL Workbench的使用
    HBase基础架构及原理
    HBase在HDFS上的目录介绍
    zookeeper的三种安装模式
    YCSB之HBase性能测试
    kerberos简单介绍
    springboot 文件上传大小配置
    List集合三种遍历方法
    Linux中给普通用户添加sudo权限
    Linux查看所有用户和组信息
  • 原文地址:https://www.cnblogs.com/yspm/p/12266258.html
Copyright © 2011-2022 走看看