莫比乌斯反演学习笔记

本文围绕莫比乌斯反演展开,先介绍了莫比乌斯函数的定义、性质及求法,证明了其为积性函数,还说明了可用线性筛筛出该函数。接着尝试证明莫比乌斯反演的正确性,并提及了它的变形,为读者理解莫比乌斯反演提供了帮助。

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

前言

停更好久了,刚好我们老师讲了莫比乌斯反演,那我就来开数论这个天坑吧。

莫比乌斯反演

比如说我们现在有一个函数

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

假设f非常容易求得,但是g很难求,那么我们是不是可以通过f来求g呢
g(n)=d|nf(nd)μ(d)g(n)=∑d|nf(nd)∗μ(d)

然后mu(d)mu(d)这个东西就是莫比乌斯函数,所以这个变换也叫莫比乌斯变换

关于莫比乌斯函数

(1) 若d=1d=1,则μ(d)=1μ(d)=1
(2) 若d=p1p2p3p4..pnd=p1∗p2∗p3∗p4∗..∗pn (注意不是笔者偷懒,而是p的次数都是1,且都是互异的质数) 那么μ(d)=(1)kμ(d)=(−1)k
(3) other wise μ(d)=0μ(d)=0

莫比乌斯函数的性质
性质1

对于正整数n,有

d|nμ(d)=[n=1]∑d|nμ(d)=[n=1]

中括号在这里表达bool表达式,如果满足中括号内的条件则为1,否则为0
证明:
(1) n=1,根据定义,显然成立
(2) n>1,设n=px11px22px33...pxkkn=p1x1∗p2x2∗p3x3∗...∗pkxk,也就是把n质因数分解
那么d一定能表示为py11py22py33...pykkp1y1∗p2y2∗p3y3∗...∗pkyk,其中(0<=yi<=xi0<=yi<=xi),那么根据定义,只要有一个y大于二,那么μ(d)=0μ(d)=0,没有贡献,所以我们只要考虑所有y均为0,1时的情况。
我们假设这k个中有r个y=1,那么出现这种情况的方案数为CrkCkr,总贡献为
Crk(1)rCkr∗(−1)r
我们再把每个d的贡献加起来
r=0kCrk(1)r∑r=0k∗Ckr∗(−1)r

是不是觉得有点眼熟呢,没错,这就是我们的二项式定理,所以上式就等于(1+(1))k=0(1+(−1))k=0
结论得证。
性质2

莫比乌斯函数为积性函数
证明:
若有两个互质的数a,b
我们把它们分别分解质因数a=px11px22...pxkka=p1x1∗p2x2∗...∗pkxkb=qy11qy22...qyttb=q1y1∗q2y2∗...∗qtyt
由于a,b互质,ab=px11px22...pxkkqy11qy22...qytta∗b=p1x1∗p2x2∗...∗pkxk∗q1y1∗q2y2∗...∗qtyt
如果μ(a)==0μ(b)==0μ(a)==0或μ(b)==0为0,那么说明一定有一个x或y>=2,那么μ(ab)μ(a∗b)也一定为0.
μ(a)μ(a)μ(b)μ(b)均为1,说明k与t均为偶数,那么k+t也为偶数,所以μ(ab)μ(a∗b)也为1
μ(a)μ(a)μ(b)μ(b)均为-1,说明k与t均为奇数,那么k+t为偶数,所以μ(ab)μ(a∗b)为1
μ(a)1μ(b)μ(a)为1,μ(b)为-1,说明k为偶数,t为奇数,那么k+t为奇数,所以μ(ab)μ(a∗b)为-1,
μ(b)1μ(a)μ(b)为1,μ(a)为-1与上一条同理。
综上所述,莫比乌斯函数为积性函数。

莫比乌斯函数的求法

这里介绍一下如何使用线性筛筛出莫比乌斯函数

    memset(isprime,1,sizeof(isprime));
    isprime[1]=0;
    mu[1]=1;
    for (int i=2;i<=100000;i++){
        if (isprime[i]){prime[++pri]=i;mu[i]=-1;}//质数的mu显然是-1
        for (int j=1;j<=pri&&i*prime[j]<=100000;j++){
            int tt=i*prime[j];
            isprime[tt]=0;
            if (i%prime[j]==0){//说明prime[j]这个质因子次数大于1,所以mu为0
                mu[tt]=0;
                break;
            }
            else{
                mu[tt]=-mu[i];//说明新出现了一个质数,所以要再*=-1
            }
        }
    }   

其复杂度就是线性筛的复杂度,和筛质数,筛phi都是一样的。

莫比乌斯反演

我们现在已经知道了莫比乌斯函数和他的一些性质,那么我们试着证明一下莫比乌斯反演的正确性。

g(n)=d|nf(nd)μ(d)g(n)=∑d|nf(nd)∗μ(d)

再把ff展开
g(n)=d|nμ(d)i|ndg(i)

然后我们把g的sigma换到前面去
g(n)=i|ng(i)d|niμ(d)g(n)=∑i|ng(i)∑d|niμ(d)

我们考虑后面这个sigma的值
(1)当i=n时,
d|niμ(d)=1g(i)d|niμ(d)=g(n)∑d|niμ(d)=1,g(i)∑d|niμ(d)=g(n)

(2)当i为小于n且是n的因数时,根据
d|nμ(d)=[n=1]∑d|nμ(d)=[n=1]

那么
d|niμ(d)=0∑d|niμ(d)=0

乘上一个g(i)仍然为0,那么上下两种情况加起来就是
d|nμ(d)i|ndg(i)∑d|nμ(d)∑i|ndg(i)

所以就是g(n),证毕
莫比乌斯反演的变形

变形一:

f(i)=d=1nig(di)>g(i)=d=1nif(di)μ(d)f(i)=∑d=1⌊ni⌋g(d∗i)−−−>g(i)=∑d=1⌊ni⌋f(d∗i)∗μ(d)

证明:
我们把上面二式的f展开
d=1nif(di)μ(d)=d=1niμ(d)d1=1ndig(d1di)∑d=1⌊ni⌋f(d∗i)∗μ(d)=∑d=1⌊ni⌋μ(d)∑d1=1⌊nd∗i⌋g(d1∗d∗i)

我们令d1*d=T
那么原式=
T=1nig(Ti)d|Tμ(d)∑T=1⌊ni⌋g(T∗i)∑d|Tμ(d)

仔细想一下i,d,T的关系应该不难理解
当(1)T=1时,
d|Tμ(d)=1g(Ti)d|Tμ(d)=g(i)∑d|Tμ(d)=1,g(T∗i)∑d|Tμ(d)=g(i)

(2)T>1时,
d|Tμ(d)=0g(Ti)d|Tμ(d)=0∑d|Tμ(d)=0,g(T∗i)∑d|Tμ(d)=0

综上所述,结论正确
变形二:
f(i)=i|dg(d)>g(i)=i|df(d)μ(di)f(i)=∑i|dg(d)−−−>g(i)=∑i|df(d)∗μ(di)

证明:
di=kdi=k
那么
i|df(d)μ(di)=k=1μ(k)f(ki)=k=1μ(k)ki|tg(t)=i|tg(t)k|tiμ(k)∑i|df(d)∗μ(di)=∑k=1∞μ(k)∗f(k∗i)=∑k=1∞μ(k)∗∑k∗i|tg(t)=∑i|t∗g(t)∗∑k|tiμ(k)

又是熟悉的套路,就是把μμ换成前缀和,就有非常好的性质了,那么最后得到的这个式子,只有在t=i时,后面的这个μμ的sigma才会变成1,所以加起来就是f(i)

尾声

以上就是笔者对莫比乌斯反演的一些理解与介绍,军训每天逃机房花了5天终于码完了,希望能给大家带来帮助

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值