「学习笔记」莫比乌斯反演

本文详细介绍了莫比乌斯反演的概念及其在数论中的应用,包括数论函数、狄利克雷卷积、莫比乌斯函数等内容,并通过实例展示了如何利用莫比乌斯反演解决特定类型的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

(今天入坑莫比乌斯反演,感觉全都是不可做题..)

莫比乌斯反演属于数论中较难的部分吧,做这种题一般长片的推导,化简,最后用枚举或者整除分块等求出答案(我做题少只见过这些).

下面要引入一些东西做铺垫.

数论函数与积性函数

首先定义数论函数f(x)f(x):定义域和值域都是整数的函数.

定义积性函数:a,b,gcd(a,b)=1∀a,b,gcd(a,b)=1f(ab)=f(a)f(b)f(ab)=f(a)f(b),称ff为积性函数

常见的积性函数有欧拉函数、莫比乌斯函数、除数函数等(这个不需要展开了解).

狄利克雷卷积

狄利克雷卷积(Dirichlet)卷积的定义如下:

f,gf,g是两个数论函数,他们的DirichletDirichlet卷积为:

(fg)(n)=Σd|nf(d)g(nd)(f∗g)(n)=Σd|nf(d)g(nd)

它满足交换率,因为dd正序取遍约数时nd也逆序取遍约数

它也满足结合律,分配率,根据定义推一推都比较好证明.

DirichletDirichlet卷积的小性质:两个积性函数卷起来还是积性函数.

莫比乌斯函数

下面定义莫比乌斯函数μμ.

一个数nn分解成Πpici.

  1. 若存在ci>1ci>1μ(n)=0μ(n)=0

  2. 否则μ(n)=(1)k,kμ(n)=(−1)k,k为本质不同的质因子个数

可以使用线性筛预处理:

其中mu(i)mu(i)表示μ(i)μ(i)flagflag为素数标记,prpr为素数表

void Init(int n) {
    memset(flag, 1, sizeof flag); flag[1] = false;
    cnt = 0; mu[1] = 1;
    for(int i = 2; i <= n; i ++) {
        if(flag[i]) {
            pr[++ cnt] = i;
            mu[i] = -1;
        }
        for(int j = 1; j <= cnt && pr[j] * i <= n; j ++) {
            flag[ i * pr[j] ] = false;
            if(i % pr[j] == 0) {
                mu[ i * pr[j] ] = 0;
                break ;
            }
            mu[ i * pr[j] ] = - mu[i];
        }
    }
}

莫比乌斯函数有什么用呢?我们需要引入一个不错的结论

e(n)=d|nμ(d)e(n)=∑d|nμ(d)

先来介绍一下ee吧,
e表示狄利克雷卷积的单位元,即ef=fe∗f=f,显然这个e(n)e(n)应该为[n==1][n==1],就是说nn1时值是11,否则值为0。这不难证明,套上卷积的定义即可.

好了,介绍完了,来证明一下这个式子吧.

nn表示成i=1kpici,令n=ki=1pin′=∏i=1kpi,根据μμ函数的定义,指数超过11那么这个数产生的贡献为0,可以直接忽略.所以d|nμ(d)=d|nμ(d)∑d|nμ(d)=∑d|n′μ(d)

d|nμ(d)=d|nμ(d)=ki=1Cik(1)i=[k==0]∑d|nμ(d)=∑d|n′μ(d)=∑i=1kCki(−1)i=[k==0]

00个质因子的时候等于1,其他时候等于00.与e是完全相同的.就证出来了.

几个函数

ee是单位元,1f(x)=1f(x)=1的常函数,μμ是莫比乌斯函数,ϕϕ为欧拉函数,ididf(i)=if(i)=i的函数.

他们卷起来有一些神奇的性质,下面两个性质可能比较重要,之后应该会用.

  • ϕ1=idϕ∗1=id
  • idμ=ϕid∗μ=ϕ

证明应该质因数分解一下就行,不会(逃

莫比乌斯反演

说了半天,终于说到了本篇博客要讲的知识,莫比乌斯反演(MobiusInversionMobiusInversion).

f(n),g(n)f(n),g(n)是两个数论函数.

如果有

f(n)=d|ng(d)f(n)=∑d|ng(d)

那么有

g(n)=d|nμ(d)f(nd)g(n)=∑d|nμ(d)f(nd)

g=μfg=μ∗f

我对莫比乌斯反演的作用的理解:
原来是用gg来表示f,反演过后是用ff来表示g.这个过程需要借助莫比乌斯函数,所以称莫比乌斯反演.

证明:我又不会(再逃

一种经典模型

给定f,n,mf,n,m,求 ni=1mj=1f(gcd(i,j))∑i=1n∑j=1mf(gcd(i,j)).

TT组询问,T104n,m106.

解法

不妨设nmn≤m,枚举d=gcd(i,j)d=gcd(i,j)

i=1nj=1mf(gcd(i,j))∑i=1n∑j=1mf(gcd(i,j))

=d=1ni=1nj=1mf(d)[gcd(i,j)==d]=∑d=1n∑i=1n∑j=1mf(d)[gcd(i,j)==d]

i=id,j=jdi=i′d,j=j′d,枚举i,ji′,j′

=d=1ni=1ndj=1mdf(d)[gcd(i,j)==1]=∑d=1n∑i′=1⌊nd⌋∑j′=1⌊md⌋f(d)[gcd(i′,j′)==1]

ee代替[gcd(i,j)==1]

=d=1ni=1ndj=1mdf(d)e(gcd(i,j))=∑d=1n∑i′=1⌊nd⌋∑j′=1⌊md⌋f(d)e(gcd(i′,j′))

用之前的结论展开ee函数:

=d=1ni=1ndj=1mdf(d)d|gcd(i,j)μ(d)

d|gcd(i,j)d|gcd(i′,j′)意味着d|id|i′并且d|jd|j′

=d=1ni=1ndj=1mdf(d)d|i,d|jμ(d)=∑d=1n∑i′=1⌊nd⌋∑j′=1⌊md⌋f(d)∑d′|i′,d′|j′μ(d′)

变换枚举顺序,将dd′提前:

=d=1nd=1nμ(d)i′′=1nddj′′=1mddf(d)=∑d=1n∑d′=1nμ(d′)∑i″=1⌊ndd′⌋∑j″=1⌊mdd′⌋f(d)

=d=1nd=1nμ(d)nddmddf(d)=∑d=1n∑d′=1nμ(d′)⌊ndd′⌋⌊mdd′⌋f(d)

g(k)=d|kμ(k)f(kd)g(k)=∑d|kμ(k)f(kd)

枚举乘积k=ddk=dd′,原式化为:

k=1ng(k)nkmk∑k=1ng(k)⌊nk⌋⌊mk⌋

根据定义式O(nlogn)O(nlogn)暴力预处理出gg,再O(n)地回答每个询问,使用整除分块即可.

对于ff有特殊性质的情况,有可能可以线性筛O(n)预处理.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值