从0开始 莫比乌斯函数和反演 学习笔记

莫比乌斯

0 前言

建议先看这篇比较简略的文章(有大概了解)

莫比乌斯函数_为最后的荣光的博客-CSDN博客

再根据个人情况食用本篇博客

1 莫比乌斯函数

1 1 定义

首先对 n n n 唯一分解

唯一分解

唯一分解定理一篇就够了_求唯一分解式程序_JdiLfc的博客-CSDN博客

唯一分解定理及其证明 - 夶 - 博客园 (cnblogs.com)

n = p 1 k 1 p 2 k 2 … p m k m , 其中 p i 为 n 的互异质因子 , ∀ i , k i 为正整数 (0) n=p_1^{k_1}p_2^{k_2}\dots p_m^{k_m},其中p_i为n的互异质因子,\forall i,k_i为正整数 \tag{0} n=p1k1p2k2pmkm,其中pin的互异质因子,i,ki为正整数(0)

μ ( n ) = { 1 , n = 1 0 , ∃ i , k i ≠ 1 ( − 1 ) m , ∀ i , k i = 1 (1) \mu(n)= \begin{cases} 1,\quad n=1\\ 0, \quad \exist i,k_i\neq1\\ (-1)^m,\quad \forall i, k_i=1 \end{cases} \tag{1} μ(n)= 1,n=10,i,ki=1(1)m,i,ki=1(1)

1 2 性质
1 2 1 性质一

莫比乌斯函数是积性函数

积性函数

(在这里只需要知道定义基本上就🆗了)

[积性函数的性质及证明 + 线性筛_新熊君的博客-CSDN博客](https://blog.csdn.net/wubaizhe/article/details/76711158#:~:text=定义: 对于一个定义域为 N %2B 的函数 f ,对于任意两个互质的正整数 a%2Cb,(ab) %3D f (a)f (b) ,则函数 f 被称为完全积性函数。)

积性函数 - Wuweizheng - 博客园 (cnblogs.com)

积性函数与线性筛 - 租酥雨 - 博客园 (cnblogs.com)

μ ( n m ) = μ ( n ) μ ( m ) \mu(nm)=\mu(n)\mu(m) μ(nm)=μ(n)μ(m)

这个证明过于显然了点

  1. m = 1 m=1 m=1,所以 μ ( m n ) = μ ( 1 ) μ ( n ) = μ ( n ) \mu(mn)=\mu(1)\mu(n)=\mu(n) μ(mn)=μ(1)μ(n)=μ(n)

    因为 μ ( m ) = μ ( 1 ) = 1 \mu(m)=\mu(1)=1 μ(m)=μ(1)=1 μ ( m ) μ ( n ) = μ ( m n ) \mu(m)\mu(n)=\mu(mn) μ(m)μ(n)=μ(mn)成立

  2. g c d ( n , m ) = 1 gcd(n,m)=1 gcd(n,m)=1时,显然 m , n m,n m,n 各自互异质因子的并集= m n mn mn 的互异质因子

    并且无交集(因为 m , n m,n m,n互质)

    所以 m m m 互异质因子个数+ n n n 互异质因子个数 = m n mn mn 的互异质因子个数

    μ ( m ) μ ( n ) = ( − 1 ) s m ( − 1 ) s n = ( − 1 ) s m + s n = μ ( m n ) \mu(m)\mu(n)=(-1)^{s_m}(-1)^{s_n}=(-1)^{s_m+s_n}=\mu(mn) μ(m)μ(n)=(1)sm(1)sn=(1)sm+sn=μ(mn)成立

    其中 s n s_n sn 表示 n n n 互异质因子的个数

1 2 2 性质二

对于任意正整数 n n n ,有:
∑ d ∣ n μ ( d ) = { 1 , n = 1 0 , n ≠ 1 (2) \sum_{d|n}\mu(d)= \begin{cases} 1,\quad n=1\\ 0, \quad n\neq1 \end{cases} \tag{2} dnμ(d)={1,n=10,n=1(2)

证明:

  1. n = 1 n=1 n=1 时, ∑ d ∣ n μ ( d ) = μ ( 1 ) = 1 \sum_{d|n}\mu(d)=\mu(1)=1 dnμ(d)=μ(1)=1

  2. n ≠ 1 n\neq1 n=1 时, ∑ d ∣ n μ ( d ) = ∑ i = 0 m C m i ( − 1 ) i = 0 \sum_{d|n}\mu(d)=\sum_{i=0}^m C_m^i(-1)^i=0 dnμ(d)=i=0mCmi(1)i=0

    为什么呢?

    首先对 n n n 唯一分解 (查看 ( 0 ) (0) (0)

    d = p 1 q 1 p 2 q 2 … p m q m d=p_1^{q_1}p_2^{q_2}\dots p_m^{q_m} d=p1q1p2q2pmqm,其中 ∀ 1 ≤ i ≤ m , 0 ≤ q i ≤ k i \forall 1\leq i\leq m, 0\leq q_i\leq k_i ∀1im,0qiki

    ∃ i , q i ≥ 2 \exist i,q_i \geq 2 i,qi2 时, μ ( d ) = 0 \mu(d)=0 μ(d)=0

    因此我们只需要考虑只存在 q i = 1   o r   0 q_i=1\space or \space 0 qi=1 or 0 的情况

    s = ∑ i = 1 m [ q i ≠ 0 ] s=\sum_{i=1}^m[q_i\neq0] s=i=1m[qi=0]

    那么 μ ( d ) = ( − 1 ) s \mu(d)=(-1)^s μ(d)=(1)s

    这样的 d d d 显然只有 C m s C_m^s Cms

    解释:

    因为当 d d d s s s 个互异质因子的时候

    s s s 个质因子显然是 n n n m m m 个互异质因子之中

    因此 d d d 就是从 m m m 个数中选 s s s 个数(有区别)的方案数

    即组合数 C m s C_{m}^s Cms

    虽然是从0开始,但不至于连组合数是什么都不知道吧

    因此,现在我们可以得出:

    ∑ d ∣ n μ ( d ) = ∑ s = 0 m C m s ( − 1 ) s \sum_{d|n}\mu(d)=\sum_{s=0}^{m}C_m^s(-1)^s dnμ(d)=s=0mCms(1)s

    根据二项式定理 ∑ d ∣ n μ ( d ) = ∑ s = 0 m C m s ( − 1 ) s = 0 \sum_{d|n}\mu(d)=\sum_{s=0}^{m}C_m^s(-1)^s=0 dnμ(d)=s=0mCms(1)s=0

    二项式定理

    【高中数学基础课】二项式定理 - 知乎 (zhihu.com)

    emmm还是只看公式就基本上🆗了反正我们是信息竞赛又不是数学竞赛

    不过要是有dalao能把证明看懂的话就orz

    (但是这好像是高中数学的知识,初三狗表示我不会)

1 3 求解

由于 μ ( n ) \mu(n) μ(n) 是积性函数,所以可以用线性筛法在 O ( n ) O(n) O(n)内完成

不知道的看积性函数

void get_mu(ll n){
    mu[1]=1;// 存放 莫比乌斯函数;
    //isp[] 存放 是否是质数
    //pri[]  存放  质数 
    for(int i=2;i<=n;i++){
        if(!isp[i]) {
            pri[++cnt]=i;
            mu[i]=-1;
        }
        for(int j=1;j<=cnt&&i*pri[j]<=n;j++){
            isp[i*pri[j]]=1;
            if(i%pri[j]==0){
                mu[i*pri[j]]=0;
                break;
            }//也可以直接break 因为里面本来存的就是0 
            else mu[i*pri[j]]=-mu[i];            
        }        
    } 
}
1 4 *超级实用的“公式”

[ g c d ( i , j ) = 1 ] = ∑ d ∣ g c d ( i , j ) μ ( d ) [gcd(i,j)=1]=\sum_{d|gcd(i,j)}\mu(d) [gcd(i,j)=1]=dgcd(i,j)μ(d)

证明:

根据性质二 ∑ d ∣ n μ ( d ) = [ n = 1 ] \sum_{d|n}\mu(d)=[n=1] dnμ(d)=[n=1]

g c d ( i , j ) gcd(i,j) gcd(i,j)带入上式 n n n

得到 ∑ d ∣ g c d ( i , j ) μ ( d ) = [ g c d ( i , j ) = 1 ] \sum_{d|gcd(i,j)}\mu(d)=[gcd(i,j)=1] dgcd(i,j)μ(d)=[gcd(i,j)=1]

2 莫比乌斯反演

2 1 公式

f ( n ) = ∑ d ∣ n g ( d ) ⇒ g ( n ) = ∑ d ∣ n f ( n d ) μ ( d ) f(n)=\sum_{d|n}g(d)\Rightarrow g(n)=\sum_{d|n}f(\frac{n}{d})\mu(d) f(n)=dng(d)g(n)=dnf(dn)μ(d)

2 2 证明

2 3 变形
2 3 1 形式一(倍数形式)

f ( i ) = ∑ d = 1 ⌊ n i ⌋ g ( d i ) ⇒ g ( i ) = ∑ d = 1 ⌊ n i ⌋ f ( d i ) μ ( d ) f(i)=\sum_{d=1}^{\lfloor \frac{n}{i} \rfloor}g(di)\Rightarrow g(i)=\sum_{d=1}^{\lfloor \frac{n}{i} \rfloor}f(di)\mu(d) f(i)=d=1ing(di)g(i)=d=1inf(di)μ(d)

证明:

(和一般形式类似)

g ( i ) = ∑ d = 1 ⌊ n i ⌋ f ( d i ) μ ( d ) g(i)=\sum_{d=1}^{\lfloor \frac{n}{i} \rfloor}f(di)\mu(d) g(i)=d=1inf(di)μ(d) 带入前式
f ( i ) = ∑ d = 1 ⌊ n i ⌋ g ( d i ) f(i)=\sum_{d=1}^{\lfloor\frac{n}{i}\rfloor}g(di) f(i)=d=1ing(di)

f ( i ) = ∑ d = 1 ⌊ n i ⌋ ∑ d 1 = 1 ⌊ n i ⌋ f ( d d 1 i ) μ ( d 1 ) f(i)=\sum_{d=1}^{\lfloor \frac{n}{i} \rfloor}\sum_{d_1=1}^{\lfloor \frac{n}{i} \rfloor}f(dd_1i)\mu(d_1) f(i)=d=1ind1=1inf(dd1i)μ(d1)

T = d d 1 T=dd1 T=dd1,则:
f ( i ) = ∑ T = 1 ⌊ n i ⌋ ∑ d = 1 ⌊ n i ⌋ f ( T i ) μ ( T d ) f(i)=\sum_{T=1}^{\lfloor \frac{n}{i} \rfloor}\sum_{d=1}^{\lfloor \frac{n}{i} \rfloor}f(Ti)\mu(\frac{T}{d}) f(i)=T=1ind=1inf(Ti)μ(dT)

f ( i ) = ∑ T = 1 ⌊ n i ⌋ f ( T i ) [ ∑ d = 1 ⌊ n i ⌋ μ ( T d ) ] f(i)=\sum_{T=1}^{\lfloor \frac{n}{i} \rfloor}f(Ti)[\sum_{d=1}^{\lfloor \frac{n}{i} \rfloor}\mu(\frac{T}{d})] f(i)=T=1inf(Ti)[d=1inμ(dT)]

f ( i ) = ∑ T = 1 ⌊ n i ⌋ f ( T i ) [ ∑ d 1 ∣ T μ ( d 1 ) ] f(i)=\sum_{T=1}^{\lfloor \frac{n}{i} \rfloor}f(Ti)[\sum_{d_1|T}\mu(d_1)] f(i)=T=1inf(Ti)[d1Tμ(d1)]

根据莫比乌斯函数的性质二
∑ d ∣ n μ ( d ) = { 1 , n = 1 0 , n ≠ 1 \sum_{d|n}\mu(d)= \begin{cases} 1,\quad n=1\\ 0, \quad n\neq1 \end{cases} dnμ(d)={1,n=10,n=1
T = 1 T=1 T=1时, ∑ d 1 ∣ T μ ( d 1 ) = 1 \sum_{d_1|T}\mu(d_1)=1 d1Tμ(d1)=1 f ( i ) [ ∑ d 1 ∣ T μ ( d 1 ) ] = f ( i ) μ ( 1 ) = f ( i ) f(i)[\sum_{d_1|T}\mu(d_1)]=f(i)\mu(1)=f(i) f(i)[d1Tμ(d1)]=f(i)μ(1)=f(i)

T ≠ 1 T\neq1 T=1时, ∑ d 1 ∣ T μ ( d 1 ) = 0 \sum_{d_1|T}\mu(d_1)=0 d1Tμ(d1)=0 f ( T i ) [ ∑ d 1 ∣ T μ ( d 1 ) ] = 0 f(Ti)[\sum_{d_1|T}\mu(d_1)]=0 f(Ti)[d1Tμ(d1)]=0

综上,
f ( i ) = ∑ T = 1 ⌊ n i ⌋ f ( T i ) [ ∑ d 1 ∣ T μ ( d 1 ) ] = f ( i ) f(i)=\sum_{T=1}^{\lfloor \frac{n}{i} \rfloor}f(Ti)[\sum_{d_1|T}\mu(d_1)]=f(i) f(i)=T=1inf(Ti)[d1Tμ(d1)]=f(i)

2 3 2 形式二(整除形式)

f ( i ) = ∑ d ∣ i g ( d ) ⇒ g ( i ) = ∑ d ∣ i f ( i d ) μ ( d ) f(i)=\sum_{d|i}g(d)\Rightarrow g(i)=\sum_{d|i}f(\frac{i}{d})\mu(d) f(i)=dig(d)g(i)=dif(di)μ(d)

就是一般形式

2 4 性质

f ( n ) 是积性函数 ⇔ g ( n ) 是积性函数 f(n)是积性函数\Leftrightarrow g(n)是积性函数 f(n)是积性函数g(n)是积性函数

3 应用

3 1 [HAOI2011]Problem b
3 1 1 题目大意

求当 i ∈ [ a , b ] , j ∈ [ c , d ] i∈[a,b],j∈[c,d] i[a,b],j[c,d],满足 g c d ( i , j ) = k gcd(i,j)=k gcd(i,j)=k的数对 ( i , j ) (i,j) (i,j)的个数


a n s = ∑ i = a b ∑ j = c d [ g c d ( i , j ) = k ] ans=\sum_{i=a}^{b}\sum_{j=c}^{d}[gcd(i,j)=k] ans=i=abj=cd[gcd(i,j)=k]

3 1 2 SOLUTION

定义函数 f f f

f ( n , m ) = ∑ i = 1 n ∑ j = 1 m [ g c d ( i , j ) = k ] f(n,m)=\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)=k] f(n,m)=i=1nj=1m[gcd(i,j)=k]

显然 a n s ans ans可以由函数 f f f 容斥得到

a n s = f ( c , d ) − f ( a − 1 , d ) − f ( b , c − 1 ) + f ( a − 1 , c − 1 ) ans=f(c,d)−f(a−1,d)−f(b,c−1)+f(a−1,c−1) ans=f(c,d)f(a1,d)f(b,c1)+f(a1,c1)

现在考虑怎么求 f f f

根据1 1 4*超级实用的公式可得
f ( n , m ) = ∑ i = 1 n ∑ j = 1 m [ g c d ( i , j ) = k ] f(n,m)=\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)=k] f(n,m)=i=1nj=1m[gcd(i,j)=k]

f ( n , m ) = ∑ i = 1 ⌊ n k ⌋ ∑ j = 1 ⌊ m k ⌋ ∑ d ∣ g c d ( i , j ) μ ( d ) f(n,m)=\sum_{i=1}^{\lfloor\frac{n}{k}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{k}\rfloor}\sum_{d|gcd(i,j)}\mu(d) f(n,m)=i=1knj=1kmdgcd(i,j)μ(d)

枚举 d ′ = d g c d d'=\frac{d}{gcd} d=gcdd

f ( n , m ) = ∑ d = 1 m i n ( ⌊ n k ⌋ , ⌊ m k ⌋ ) μ ( d ) g ( k d ) f(n,m)=\sum_{d=1}^{min(\lfloor\frac{n}{k}\rfloor,\lfloor\frac{m}{k}\rfloor)}\mu(d)g(kd) f(n,m)=d=1min(⌊kn,km⌋)μ(d)g(kd)

g ( d ) 表示 i [ 1 , n ] , j [ 1 , m ] 满足 d ∣ g c d ( x , y ) 的对数 g(d)表示i[1,n],j[1,m]满足d|gcd(x,y)的对数 g(d)表示i[1,n],j[1,m]满足dgcd(x,y)的对数

显然可以知道 g ( d ) = ⌊ n d ⌋ ⌊ m d ⌋ 显然可以知道g(d)=\lfloor\frac{n}{d}\rfloor\lfloor\frac{m}{d}\rfloor 显然可以知道g(d)=dndm

f ( n , m ) = ∑ d = 1 m i n ( ⌊ n k ⌋ , ⌊ m k ⌋ ) μ ( d ) × ⌊ n k d ⌋ × ⌊ m k d ⌋ f(n,m)=\sum_{d=1}^{min(\lfloor\frac{n}{k}\rfloor,\lfloor\frac{m}{k}\rfloor)}\mu(d)\times\lfloor\frac{n}{kd}\rfloor\times\lfloor\frac{m}{kd}\rfloor f(n,m)=d=1min(⌊kn,km⌋)μ(d)×kdn×kdm

浅谈莫比乌斯反演 - B1ueC4t 的博客 - 洛谷博客 (luogu.com.cn)

莫比乌斯反演-让我们从基础开始 - An_Account 的博客 - 洛谷博客 (luogu.com.cn)

莫比乌斯反演 - OI Wiki (oi-wiki.org)

莫比乌斯函数及其应用 - ZAP-Queries + Problem b + GCD_莫比乌斯函数应用_njuptACMcxk的博客-CSDN博客

就可以直接计算了

就是这么简单~~(才怪)~~

3 1 3 CODE
#include<bits/stdc++.h>
using namespace std;
const int N=5e4+2;
int T,a,b,c,d,k,mu[N],SumMu[N],pri[N],isp[N],cnt;
int Mobius(int n,int m,int k){//(i[1,n]j[1,m]{[gcd(i,j)=k]})的个数
    if(n>m) swap(n,m);
    n/=k,m/=k; 
    int ans=0;
    for(int i=1,j;i<=n;i=j+1) {
        j=min(n/(n/i),m/(m/i));
        ans+=(SumMu[j]-SumMu[i-1])*(n/i)*(m/i);
    }
    return ans;
}
void Mu(int n);//见模板部分
int main(){
    Mu(N-2);
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    cin>>T;
    while(T--){
        cin>>a>>b>>c>>d>>k;
        cout<<Mobius(b,d,k)-Mobius(b,c-1,k)-Mobius(a-1,d,k)+Mobius(a-1,c-1,k)<<"\n";
    }
    return 0;
}
「BZOJ2693」jzptab

【BZOJ2693】jzptab - yoyoball - 博客园 (cnblogs.com)

搞半天发现这个模数搞错了。。。。尬住了,ԾㅂԾ,

[BZOJ4407]于神之怒加强版 - 租酥雨 - 博客园 (cnblogs.com)

枚举倍数真的是一个非常常见并且常用的套路啊!!

4 后话

整除分块 - pengym - 博客园 (cnblogs.com)

最后,我想说莫比乌斯反演-让我们从基础开始 - An_Account 的博客 - 洛谷博客 (luogu.com.cn)这篇博客非常的实用(just tell you the sercet of the common probelms’ solution),但是如果想彻底了解的话,我们还是老老实实学吧…( _ _)ノ|

完结撒花❀

★,°:.☆( ̄▽ ̄)/$:.°★

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值