莫比乌斯反演详解
话说这是我打的第一篇算法博客2333
话不多说直接进入正题
一、莫比乌斯函数μ
什么是μ?
μ(n)={
1,n=1;
(-1)k,n=p1*p2*p3*……*pk ,pn为互不相等的质数;
0,else;
}
μ的性质:
1、积性函数:线性筛
在线性筛质数的基础上加几句处理就好了
void get() { mu[1]=1; for(int i=2;i<=10000000;i++) { //cout<<i<<endl; if(!p[i]) { mu[i]=-1; prime[++cnt]=i; } for(int j=1;prime[j]*i<=10000000&&j<=cnt;j++) { p[prime[j]*i]=1; if(i%prime[j]==0)break; mu[i*prime[j]]=-mu[i]; } } }
2、Σi|nμ(i)=(n==1)
二、狄利克雷卷积
给定三个数论函数f,g,h,如果满足h(n)=Σd|nf(d)*g(n/d),那么我们称h=f*g,读作f卷g
狄利克雷卷积的性质:
1、交换律 f*g=g*f
2、结合律 f*g*h=f*(g*h)
3、分配律 f*(g+h)=f*g+f*h
三、积性函数的狄利克雷卷积特殊性质
积性函数指对于所有互质的整数a和b有性质f(ab)=f(a)f(b)的数论函数。
常见积性函数:
μ
φ
d d(n)=Σk|n1
δ δ(n)=Σk|nk
还有三个及其重要的完全积性函数,就是说任意a,b,满足f(a)*f(b)=f(a*b),他们是
e e(n)=(n==1)(这个函数也有管他叫ε的,但他太难打了,就叫e吧)
I I(n)=1
id id(n)=n
不要看他们式子简单,他们可是莫比乌斯反演的核心,建议找张纸把他们抄下来,免得忘
根据上面的狄利克雷卷积,我们有
μ*I=e
又由e的式子,我们有
f*e=f,f是任意数论函数
然后就开始推式子了
设f=g*I,f,g均为积性函数
在两边同时卷上μ,则
f*μ=g*I*μ
I*μ=e,g*e=g
所以有 f*μ=g
即:
若f=g*I,则g=f*μ
然后就是上述几个积性函数的综合
μ*I=e
φ*I=id===>φ=id*μ
I*I=d
I*id=δ
四、数论分块
给定n,求(Σd=1n ⌊n /d⌋)%998244353,n<=1e14
直接枚举gg
考虑优化
我们发现,⌊n/d⌋是有可能等于⌊n/(d+1)⌋的
那我们为什么要重复算呢??
直接加就好了!!
那也就是说,对于一个i,我们要找到一个j,使得⌊n/i⌋=⌊n/(i+1)⌋=⌊n/(i+2)⌋=……=⌊n/j⌋!=n/(j+1)
那么,根据数学的一顿乱搞,我们得出
j=⌊n/(⌊n/i⌋)⌋
于是就可以优化了
可以证明优化的幅度是O(sqrt(n))的,但我不会
那就代码了
for(ll i=1,j;i<=n;i=j+1) { j=n/(n/i); ans=(ans+(j-i+1ll)%M*(n/i)%M)%M; }
五、莫比乌斯反演
先来一道热身题:
求Σi=1nΣj=1mgcd(i,j)==1,n,m<=1e7,T<=1e4
可以先自己试一试
开始化简
后面等于1的形式一看就是e
考虑e=I*μ
则原式=Σi=1nΣj=1mΣd|gcd(i,j)μ(d)
考虑枚举d
Σd=1min(n,m)μ(d)*Σi=1nΣj=1md|gcd(i,j)
考虑d|gcd(i,j)的意义
当且仅当d|i&&d|j时,d|gcd(i,j)
因此,原式可化为
Σd=1min(n,m)μ(d)*Σi=1nd|iΣj=1md|j
加个括号
Σd=1min(n,m)μ(d)*(Σi=1nd|i)*(Σj=1md|j)
(Σi=1nd|i)=⌊n/d⌋,(Σj=1md|j)=⌊m/d⌋
因此原式可化为