【学习笔记】莫比乌斯反演

前置知识:

积性函数:

对于互质整数(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) 再前缀和一次

原文地址:https://www.cnblogs.com/yspm/p/12266258.html