莫比乌斯反演详解

先导知识:

  1. [ P ] [P] [P]表示当 P P P为真时 [ P ] [P] [P]为1,否则为0。
  2. a ∣ b a|b ab b b b a a a整除。
  3. i d ( n ) = n id(n)=n id(n)=n 单位函数,属于完全积性函数,相当于 i d 1 ( n ) id^1(n) id1(n)

数论函数

定义:数论函数指一类定义域是正整数,值域是一个数集的函数。
加法:逐项相加即可
数乘:用一个常数 x x x f ( n ) = x ∗ f ( n ) f(n)=x∗f(n) f(n)=xf(n)

狄利克雷卷积

定义两个数论函数的狄利克雷卷积 ∗ :
若函数 h = f ∗ g h=f∗g h=fg则:

    h ( n ) = ∑ d ∣ n f ( d ) ∗ g ( n d ) h(n) = \sum\limits_{d|n}f(d)*g(\frac{n}{d}) h(n)=dnf(d)g(dn)
等价于
    h ( n ) = ∑ i ∗ j = n f ( i ) ∗ g ( j ) h(n) = \sum\limits_{i*j=n}f(i)*g(j) h(n)=ij=nf(i)g(j)

狄利克雷卷积有以下性质:
1、交换律: f ∗ g = g ∗ f f∗g=g∗f fg=gf
2、结合律: f ∗ ( g ∗ h ) = ( f ∗ g ) ∗ h f∗(g∗h)=(f∗g)∗h f(gh)=(fg)h
3、分配律: f ∗ h + g ∗ h = ( f + g ) ∗ h f∗h+g∗h=(f+g)∗h fh+gh=(f+g)h
4、单位元: ϵ ∗ f = f , 其 中 ϵ ( n ) = [ n = = 1 ] ϵ∗f=f,其中ϵ(n)=[n==1] ϵf=fϵ(n)=[n==1]
5、逆元:对于每一个f(1)≠0的函数f,都有 f ∗ g = ϵ f∗g=ϵ fg=ϵ

求函数逆元ϵ
   g ( n ) = 1 f ( 1 ) ( ϵ − ∑ d ∣ n , d ≠ 1 f ( d ) ∗ g ( n d ) ) g(n)=\frac{1}{f(1)}(ϵ-\sum\limits_{d|n,d≠1}f(d)*g(\frac{n}{d})) g(n)=f(1)1(ϵdn,d=1f(d)g(dn))

   ∑ d ∣ n f ( d ) ∗ g ( n d ) = f ( 1 ) g ( n ) + ∑ d ∣ n , d ≠ 1 f ( d ) ∗ g ( n d ) = ϵ \sum\limits_{d|n}f(d)*g(\frac{n}{d})=f(1)g(n)+\sum\limits_{d|n,d≠1}f(d)*g(\frac{n}{d})=ϵ dnf(d)g(dn)=f(1)g(n)+dn,d=1f(d)g(dn)=ϵ

积性函数

如果一个数论函数 f f f有当 g c d ( n , m ) = = 1 gcd(n,m)==1 gcd(n,m)==1

     f ( n ∗ m ) = f ( n ) f ( m ) f(n*m)=f(n)f(m) f(nm)=f(n)f(m)

就称 f f f为积性函数。

g c d ( n , m ) ≠ 1 gcd(n,m)≠1 gcd(n,m)=1时,也有 f ( n ∗ m ) = f ( n ) f ( m ) ) f(n*m)=f(n)f(m)) f(nm)=f(n)f(m))时, f f f为完全积性函数。
常见的积性函数有欧拉函数 φ ( n ) φ(n) φ(n),莫比乌斯函数 μ ( n ) μ(n) μ(n),因子和函数 σ ( n ) σ(n) σ(n)等。

莫比乌斯反演

我们先看一个函数:

F ( n ) = ∑ d ∣ n f ( d ) F(n) = \sum\limits_{d|n}f(d) F(n)=dnf(d)

可以看出:
F ( 1 ) = f ( 1 ) F(1)=f(1) F(1)=f(1)
F ( 2 ) = f ( 1 ) + f ( 2 ) F(2)=f(1)+f(2) F(2)=f(1)+f(2)
F ( 3 ) = f ( 1 ) + f ( 3 ) F(3)=f(1)+f(3) F(3)=f(1)+f(3)
F ( 4 ) = f ( 1 ) + f ( 2 ) + f ( 4 ) F(4)=f(1)+f(2)+f(4) F(4)=f(1)+f(2)+f(4)
F ( 5 ) = f ( 1 ) + f ( 5 ) F(5)=f(1)+f(5) F(5)=f(1)+f(5)
F ( 6 ) = f ( 1 ) + f ( 2 ) + f ( 3 ) + f ( 6 ) F(6)=f(1)+f(2)+f(3)+f(6) F(6)=f(1)+f(2)+f(3)+f(6)
F ( 7 ) = f ( 1 ) + f ( 7 ) F(7)=f(1)+f(7) F(7)=f(1)+f(7)
F ( 8 ) = f ( 1 ) + f ( 2 ) + f ( 4 ) + f ( 8 ) F(8)=f(1)+f(2)+f(4)+f(8) F(8)=f(1)+f(2)+f(4)+f(8)

找规律可得:
​ f ( 1 ) = F ( 1 ) ​f(1)=F(1) f(1)=F(1)
f ( 2 ) = F ( 2 ) − F ( 1 ) f(2)=F(2)−F(1) f(2)=F(2)F(1)
f ( 3 ) = F ( 3 ) − F ( 1 ) f(3)=F(3)−F(1) f(3)=F(3)F(1)
f ( 4 ) = F ( 4 ) − F ( 2 ) f(4)=F(4)−F(2) f(4)=F(4)F(2)
f ( 5 ) = F ( 5 ) − F ( 1 ) f(5)=F(5)−F(1) f(5)=F(5)F(1)
f ( 6 ) = F ( 6 ) − F ( 3 ) − F ( 2 ) + F ( 1 ) f(6)=F(6)−F(3)−F(2)+F(1) f(6)=F(6)F(3)F(2)+F(1)
f ( 7 ) = F ( 7 ) − F ( 1 ) f(7)=F(7)−F(1) f(7)=F(7)F(1)
f ( 8 ) = F ( 8 ) − F ( 4 ) f(8)=F(8)−F(4) f(8)=F(8)F(4)

莫比乌斯公式

由上面的规律可以看出 f ( n ) f(n) f(n)等于加或减去 F ( d ) , d F(d),d F(d),d n n n的因子,而是加还是减由理解为是由莫比乌斯函数决定。

这里先给出莫比乌斯反演公式:
f ( n ) = ∑ d ∣ n μ ( d ) F ( n d ) f(n) = \sum\limits_{d|n}μ(d)F(\frac{n}{d}) f(n)=dnμ(d)F(dn)
其他形式:
 ​ f ( n ) = ∑ n ∣ d μ ( d n ) F ( d ) f(n) = \sum\limits_{n|d}μ(\frac{d}{n})F(d) f(n)=ndμ(nd)F(d)

μ即为莫比乌斯函数

μ ( n ) = { 1 n = 1 ( − 1 ) r n = p 1 p 2 p 3 . . . p r , 其 中 p i 为 不 同 素 数 0 其 他 情 况 μ(n)=\left\{ \begin{aligned} &1& &n=1 \\ &(-1)^r& &n=p^1p^2p^3...p^r,其中p^i为不同素数\\ & 0& &其他情况 \end{aligned} \right. μ(n)=1(1)r0n=1n=p1p2p3...pr,pi
μ具有以下性质
∑ d ∣ n μ ( d ) = { 1 n = 1 0 n > 1 \sum\limits_{d|n}μ(d)=\left\{\begin{aligned} &1& &n=1 \\ & 0& &n>1\\ \end{aligned} \right. dnμ(d)={10n=1n>1

莫比乌斯函数与欧拉函数的联系: ∑ d ∣ n μ ( d ) d = φ ( n ) n , ( i d ∗ μ ) ( i ) = φ ( i ) \sum\limits_{d|n}\frac{μ(d)}{d}=\frac{φ(n)}{n},(id∗μ)(i)=φ(i) dndμ(d)=nφ(n),(idμ)(i)=φ(i)
证明上面式子只需把 F ( n ) = n , f ( n ) = φ ( n ) F(n)=n,f(n)=φ(n) F(n)=n,f(n)=φ(n)带入莫比乌斯公式即可

下面证明莫比乌斯公式:

f ( n ) = ∑ d ∣ n μ ( d ) F ( n d ) = ∑ d ∣ n μ ( d ) ∑ k ∣ n d f ( k ) = ∑ k ∣ n f ( k ) ∑ d ∣ n d μ ( d ) = f ( k ) f(n) = \sum\limits_{d|n}μ(d)F(\frac{n}{d})=\sum\limits_{d|n}μ(d)\sum\limits_{k|\frac{n}{d}}f(k)=\sum\limits_{k|n}f(k)\sum\limits_{d|\frac{n}{d}}μ(d)=f(k) f(n)=dnμ(d)F(dn)=dnμ(d)kdnf(k)=knf(k)ddnμ(d)=f(k)

这里运用了这条性质 ∑ d ∣ n μ ( d ) = { 1 n = 1 0 n > 1 \sum\limits_{d|n}μ(d)=\left\{\begin{aligned} &1& &n=1 \\ & 0& &n>1\\ \end{aligned} \right. dnμ(d)={10n=1n>1
n = 1 n=1 n=1 ∑ d ∣ n μ ( d ) \sum\limits_{d|n}μ(d) dnμ(d) 1 1 1,其他情况均为 0 0 0。所以只有 n d \frac{n}{d} dn 1 1 1时即 n = d n=d n=d ∑ d ∣ n μ ( d ) ≠ 0 \sum\limits_{d|n}μ(d)≠0 dnμ(d)=0

莫比乌斯函数求法

莫比乌斯函数是积性函数,所以我们可以用线性筛 o ( n ) o(n) o(n)求出莫比乌斯函数

int mu[maxx],vis[maxx],prime[maxx];
void slove()
{
    mu[1] = 1; cnt = 0;
    for(int i=2; i<=n; i++)
    {
        if(!vis[i])
        {
            prime[cnt++] = i;
            mu[i] = -1;
        }
        for(int j=0; j<cnt&&i*prime[j]<=n; j++)
        {
            vis[i*prime[j]] = 1;
            if(i%prime[j]==0) 
            {
                mu[i*prime[j]] = 0;
                break;
            }
            mu[i*prime[j]] = -mu[i];
        }
    }
}

莫比乌斯反演简单应用

求下面函数

∑ i = 1 n ∑ j = 1 m g c d ( i , j ) \sum\limits_{i=1}^n\sum\limits_{j=1}^mgcd(i,j) i=1nj=1mgcd(i,j) 其中 n < 1 e 7 , m < 1 e 7 n<1e7,m<1e7 n<1e7,m<1e7

上面的式子可以化为
如果 n > m n>m n>m 交换 n , m n,m nm

∑ d = 1 n ∑ i = 1 n ∑ j = 1 m d [ g c d ( i , j ) = = d ] \sum\limits_{d=1}^n\sum\limits_{i=1}^n\sum\limits_{j=1}^md[gcd(i,j)==d] d=1ni=1nj=1md[gcd(i,j)==d]

∑ d = 1 n d ∑ i = 1 ⌊ n d ⌋ ∑ j = 1 ⌊ m d ⌋ [ g c d ( i , j ) = = 1 ] \sum\limits_{d=1}^nd\sum\limits_{i=1}^{\lfloor\frac{n} {d}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{m}{d}\rfloor}[gcd(i,j)==1] d=1ndi=1dnj=1dm[gcd(i,j)==1]

x = ⌊ n d ⌋ , y = ⌊ m d ⌋ x={\lfloor\frac{n}{d}\rfloor},y={\lfloor\frac{m}{d}\rfloor} x=dn,y=dm

∑ d = 1 n d ∑ i = 1 x ∑ j = 1 y [ g c d ( i , j ) = = 1 ] \sum\limits_{d=1}^nd\sum\limits_{i=1}^x\sum\limits_{j=1}^y[gcd(i,j)==1] d=1ndi=1xj=1y[gcd(i,j)==1]

设:
f ( x ) = ∑ i = 1 x ∑ j = 1 y [ g c d ( i , j ) = = x ] f(x)=\sum\limits_{i=1}^x\sum\limits_{j=1}^y[gcd(i,j)==x] f(x)=i=1xj=1y[gcd(i,j)==x]
F ( x ) = ∑ x ∣ d f ( d ) F(x)=\sum\limits_{x|d}f(d) F(x)=xdf(d)

所以根据莫比乌斯公式的第二种形式:
f ( 1 ) = ∑ 1 ∣ d μ ( d 1 ) F ( d ) f(1)=\sum\limits_{1|d}\mu(\frac{d}{1})F(d) f(1)=1dμ(1d)F(d)
f ( 1 ) = ∑ d = 1 n μ ( d ) F ( d ) f(1)=\sum\limits_{d=1}^n\mu(d)F(d) f(1)=d=1nμ(d)F(d)

F ( x ) = ∑ x ∣ d ∑ i = 1 n ∑ j = 1 m [ g c d ( i , j ) = = d ] F(x)=\sum\limits_{x|d}\sum\limits_{i=1}^n\sum\limits_{j=1}^m[gcd(i,j)==d] F(x)=xdi=1nj=1m[gcd(i,j)==d]
即:
F ( x ) = ∑ i = 1 n ∑ j = 1 m [ x ∣ g c d ( i , j ) ] F(x)=\sum\limits_{i=1}^n\sum\limits_{j=1}^m[x|gcd(i,j)] F(x)=i=1nj=1m[xgcd(i,j)]
F ( x ) = ∑ i = 1 ⌊ n x ⌋ ∑ j = 1 ⌊ m x ⌋ [ 1 ∣ g c d ( i , j ) ] F(x)=\sum\limits_{i=1}^{\lfloor\frac{n} {x}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{m} {x}\rfloor}[1|gcd(i,j)] F(x)=i=1xnj=1xm[1gcd(i,j)]
F ( x ) = ⌊ n x ⌋ ⌊ m x ⌋ F(x)={\lfloor\frac{n} {x}\rfloor}{\lfloor\frac{m} {x}\rfloor} F(x)=xnxm

所以
f ( 1 ) = ∑ i = 1 x ∑ j = 1 y [ g c d ( i , j ) = = 1 ] = ∑ d = 1 n μ ( d ) ⌊ x d ⌋ ⌊ y d ⌋ f(1)=\sum\limits_{i=1}^x\sum\limits_{j=1}^y[gcd(i,j)==1]=\sum\limits_{d=1}^n\mu(d){\lfloor\frac{x} {d}\rfloor}{\lfloor\frac{y} {d}\rfloor} f(1)=i=1xj=1y[gcd(i,j)==1]=d=1nμ(d)dxdy

f ( 1 ) f(1) f(1)带入 ∑ d = 1 n d ∑ i = 1 x ∑ j = 1 y [ g c d ( i , j ) = = 1 ] \sum\limits_{d=1}^nd\sum\limits_{i=1}^x\sum\limits_{j=1}^y[gcd(i,j)==1] d=1ndi=1xj=1y[gcd(i,j)==1]可得
∑ d = 1 n d ∑ i = 1 x ∑ j = 1 y [ g c d ( i , j ) = = 1 ] = ∑ d = 1 n d ∑ i = 1 x μ ( i ) ⌊ x i ⌋ ⌊ y i ⌋ \sum\limits_{d=1}^nd\sum\limits_{i=1}^x\sum\limits_{j=1}^y[gcd(i,j)==1]=\sum\limits_{d=1}^nd\sum\limits_{i=1}^x\mu(i){\lfloor\frac{x} {i}\rfloor}{\lfloor\frac{y} {i}\rfloor} d=1ndi=1xj=1y[gcd(i,j)==1]=d=1ndi=1xμ(i)ixiy

上式可以写为:
∑ d = 1 n ∑ i = 1 x d μ ( i ) ⌊ x i ⌋ ⌊ y i ⌋ \sum\limits_{d=1}^n\sum\limits_{i=1}^xd\mu(i){\lfloor\frac{x} {i}\rfloor}{\lfloor\frac{y} {i}\rfloor} d=1ni=1xdμ(i)ixiy

代入 x = n d , y = m d x=\frac{n}{d},y=\frac{m}{d} x=dn,y=dm
∑ d = 1 n ∑ i = 1 n d d μ ( i ) ⌊ n i d ⌋ ⌊ m i d ⌋ \sum\limits_{d=1}^n\sum\limits_{i=1}^{\frac{n}{d}}d\mu(i){\lfloor\frac{n} {id}\rfloor}{\lfloor\frac{m} {id}\rfloor} d=1ni=1dndμ(i)idnidm

D = i d D=id D=id带入可得
∑ D = 1 n ∑ d ∣ D d μ ( D d ) ⌊ n D ⌋ ⌊ m D ⌋ \sum\limits_{D=1}^n\sum\limits_{d|D}d\mu(\frac{D}{d}){\lfloor\frac{n} {D}\rfloor}{\lfloor\frac{m} {D}\rfloor} D=1ndDdμ(dD)DnDm
∑ D = 1 n ⌊ n D ⌋ ⌊ m D ⌋ ∑ d ∣ D d μ ( D d ) \sum\limits_{D=1}^n{\lfloor\frac{n} {D}\rfloor}{\lfloor\frac{m} {D}\rfloor}\sum\limits_{d|D}d\mu(\frac{D}{d}) D=1nDnDmdDdμ(dD)

∑ d ∣ D d μ ( D d ) \sum\limits_{d|D}d\mu(\frac{D}{d}) dDdμ(dD) f ( D ) f(D) f(D)
原式为:
∑ D = 1 n ⌊ n D ⌋ ⌊ m D ⌋ f ( D ) \sum\limits_{D=1}^n{\lfloor\frac{n} {D}\rfloor}{\lfloor\frac{m} {D}\rfloor}f(D) D=1nDnDmf(D)

如果可以计算出 f ( D ) f(D) f(D)就可以通过除法分块解出此题了
接下来我们来讨论 f ( D ) f(D) f(D)

线性筛筛积性函数

显然 f ( D ) f(D) f(D)是一个积性函数。

D = ∏ i = 1 r P i a i ( P 为 质 数 ) D=\prod_{i=1}^rP_i^{a_i}(P为质数) D=i=1rPiaiP,显然:
f ( D ) = ∏ i = 1 t f ( P i a i ) f(D)=\prod_{i=1}^tf(P_i^{a_i}) f(D)=i=1tf(Piai)

f ( P i a i ) f(P_i^{a_i}) f(Piai)可以展开为:
f ( P i a i ) = ∑ d ∣ P i a i d μ ( D d ) = 1 × μ ( P i a i ) + P i × μ ( P i a i − 1 ) + . . . + P i a i × μ ( 1 ) f(P_i^{a_i})=\sum_{d|P_i^{a_i}}d\mu(\frac Dd)=1\times\mu(P_i^{a_i})+P_i\times\mu(P_i^{a_i-1})+...+P_i^{a_i}\times\mu(1) f(Piai)=dPiaidμ(dD)=1×μ(Piai)+Pi×μ(Piai1)+...+Piai×μ(1)

根据μ的定义可知, μ ( P i a i ) , μ ( P i a i − 1 ) , . . . , μ ( P i 2 ) \mu(P_i^{a_i}),\mu(P_i^{a_i-1}),...,\mu(P_i^2) μ(Piai),μ(Piai1),...,μ(Pi2)都等于0,也就是说,我们只需要考虑这个式子的最后两项。即:
f ( P i a i ) = P i ( a i − 1 ) × μ ( P i ) + P i a i × μ ( 1 ) = − P i ( a i − 1 ) + P i a i = P i ( a i − 1 ) ( P i − 1 ) f(P_i^{a_i})=P_i^{(a_i-1)}\times\mu(P_i)+P_i^{a_i}\times\mu(1)=-P_i^{(a_i-1)}+P_i^{a_i}=P_i^{(a_i-1)}(P_i-1) f(Piai)=Pi(ai1)×μ(Pi)+Piai×μ(1)=Pi(ai1)+Piai=Pi(ai1)(Pi1)

所以:
f ( D ) = ∏ i = 1 r P i ( a i − 1 ) ( P i − 1 ) f(D)=\prod_{i=1}^rP_i^{(a_i-1)}(P_i-1) f(D)=i=1rPi(ai1)(Pi1)

考虑线性筛筛法
f ( D ) = { 1 ( D = 1 ) p − 1 ( D   i s   p r i m e ) f(D)=\begin{cases}1&(D=1)\\p-1&(D\ is\ prime)\end{cases} f(D)={1p1(D=1)(D is prime)

筛的过程中
f ( i × P j ) = { f ( i ) × f ( P j ) ( P j ∤ i ) f ( i ) × P i ( P j ∣ i ) f(i\times P_j)=\begin{cases}f(i)\times f(P_j)&(P_j\not{|}i)\\f(i)\times P_i&(P_j|i)\end{cases} f(i×Pj)={f(i)×f(Pj)f(i)×Pi(Pji)(Pji)

此时可以用线性筛就算出 f ( D ) f(D) f(D)了。

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
const int maxx=1e7+7,mod=1e9+7;
ll prime[maxx],f[maxx];
bool vis[maxx];
void sieve(int n)//线性筛计算f函数值
{
    vis[1]=1;f[1]=1;
    for(ll i=2;i<=n;i++)
    {
        if(!vis[i]) {prime[++prime[0]]=i;f[i]=(i-1)%mod;}
        for(ll j=1;j<=prime[0]&&prime[j]*i<=n;j++)
        {
            vis[i*prime[j]]=1;
            if(i%prime[j])
                f[i*prime[j]]=(f[i]*f[prime[j]])%mod;
            else
            {
                f[i*prime[j]]=(f[i]*prime[j])%mod;
                break;
            }
        }
    }
}
int main()
{
    ll n,m;
    sieve(10000000);
    while(cin>>n>>m)
    {
        if(n>m) swap(n,m);
        ll ans=0;
        for(int i=1;i<=n;i++)
        {
            ans=(ans+(((n/i)*(m/i))%mod*f[i])%mod)%mod;
        }
        cout<<ans<<endl;
    }
}
  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值