莫比乌斯反演详解

话说这是我打的第一篇算法博客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=1 ⌊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⌋

因此原式可化为Σd=1min(n,m)μ(d)*⌊n/d⌋*⌊m/d⌋

显然可以数论分块O(n+T*sqrt(n))

posted @ 2019-06-22 19:04  david_alwal  阅读(1014)  评论(3编辑  收藏  举报