莫比乌斯反演入门

莫比乌斯反演入门

莫比乌斯是什么,能吃么?

\[F(n)=\sum_{d|n}f(d) \Leftrightarrow f(n) = \sum_{d|n} \mu(d)F(\dfrac nd) \]

\[F(n)=\sum_{n|d}f(d) \Leftrightarrow f(n) = \sum_{n|d} \mu(d)F(\dfrac dn) \]

换句话来讲,对于一些函数 \(f(n)\),如果很难直接求出它的值,而容易求出其倍数和或约数和 \(g(n)\),那么可以通过莫比乌斯反演简化运算,求得 \(f(n)\)的值。

1. 前置芝士

积性函数

定义

  • 定义域为正整数集的函数称为数论函数
  • 满足 \(f(ab) = f(a)f(b)\)(其中 $ gcd(a,b) = 1 $的数论函数称为积性函数
  • 完全积性函数对 \(a,b\) 没有互质限制
  • 示例函数
    • 积性函数:\(\varphi(n)\)(欧拉函数)、$ \mu(n) $(莫比乌斯函数)
    • 完全积性函数:
      • 单位函数 $ \varepsilon(n) = [n = 1] $, $[P] $ 为示性函数,\(P\) 为真时取 1,否则取 0 )
      • 恒等函数 $ {id}(n) = n $
      • 常函数 ${1}(n) = 1 $(注意与普通常数 1 区分,这里是数论函数表示 )

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

对两个数论函数 \(f(x)\)\(g(x)\),狄利克雷卷积结果\(h(x)\) 定义为

\[h(x)=\sum_{d\mid x} f(d)g({\frac{x}{d}})=\sum_{ab = x} f(a)g(b)\\ 以上简记 h=f*g \]

性质:

交换律:$ f * g = g * f $

结合律:$(f * g) * h = f * (g * h) $

分配律:$ (f + g) * h = f * h + g * h $

等式性质$f = g $ 充要条件是 \(f * h = g * h\)\(h(1) \neq 0\)

莫比乌斯函数

\(\mu\)是莫比乌斯函数

定义:

\[\mu = \left\{ \begin{aligned} 1~~~~~~~~~~~~~~~~~~~n=1\\ 0~~~~~~~n含有平方因子\\ (-1)^k~~~otherwise \end{aligned} \right. \]

其中\(k\)\(n\)的本质不同的质因子数

性质

莫比乌斯函数是积性函数,\(\mu(x*y)=\mu(x)*\mu(y)\)

\[\sum_{d \mid n}\mu(d)=\left\{\begin{aligned} 1~~~~~~~~~ n=1\\ 0~otherwise\end{aligned} \right. ,即\sum_{d \mid n}\mu(d)=[n=1] \]

特殊的当\([gcd(i,j)=1] = \sum_{d \mid gcd(i,j)}\mu(d)\)

\(\sum_{d\mid n}\frac {\mu(d)}{d}=\frac {\varphi(n)}{n}\),即 \(n=\sum_{d\mid n} \varphi(d)\),即 \(\varphi*1= id\)

线性筛

由于\(\mu\)函数是积性函数,因此可以线性筛莫比乌斯函数(线性筛基本可以球所有积性函数,尽管方式不尽相同)。

void getMu() {
  mu[1] = 1;
  for (int i = 2; i <= n; ++i) {
    if (!flg[i]) p[++tot] = i, mu[i] = -1;
    for (int j = 1; j <= tot && i * p[j] <= n; ++j) {
      flg[i * p[j]] = 1;
      if (i % p[j] == 0) {
        mu[i * p[j]] = 0;
        break;
      }
      mu[i * p[j]] = -mu[i];
    }
  }
}

例题,例题,我们需要更多的例题

P2522 [HAOI2011] Problem b

多组数据

\[\sum_{i=x}^{n}\sum_{j=y}^{m}[gcd(i,j)=k]~~~(1<= T,x,y,n,m,k<=5*10^4) \]

根据容斥原理可拆解成4个部分,

每个部分为

\[f(k)=\sum_{i=1}^{n}\sum_{j=1}^{m}[gcd(i,j)=k] \]

容易发现,并不好求,但是我们很好得出

\[F(k)=\sum_{i=1}^{n}\sum_{j=1}^{m}[k \mid gcd(i,j)]=\lfloor n/k \rfloor\lfloor m/k \rfloor \]

根据

\[F(k)=\sum_{k|d}f(d) \]

所以

\[f(k)=\sum_{k \mid d}\mu(\frac dk)F(d)=\sum_{k \mid d}\mu(\frac dk)\lfloor \frac nd\rfloor \lfloor\frac md\rfloor \]

化简得:

\[原式= f(k)=\sum_{d}\mu(d)F(dk)=\sum_{d}\mu(d)\lfloor \frac n{dk}\rfloor \lfloor\frac m{dk}\rfloor \]

\[d<=min(\lfloor \frac n{k}\rfloor, \lfloor\frac m{k}\rfloor) \]

\[f(k)=\sum_{d}^{min(\lfloor \frac n{k}\rfloor, \lfloor\frac m{k}\rfloor)}\mu(d)F(dk)=\sum_{d}\mu(d)\lfloor \frac n{dk}\rfloor \lfloor\frac m{dk}\rfloor \]

式子可以数论分块求解。

时间复杂度\(\Theta(N+T \sqrt n)\)

P1447 [NOI2010] 能量采集 - 洛谷 (luogu.com.cn)

这个跟上面差不多

SP5971 LCMSUM - LCM Sum - 洛谷 (luogu.com.cn)

多组样例,求

\[\sum_{i=1}^nlcm(i,n) \]

很容易的化简得

\[\sum_{i=1}^n \frac{i*n}{\gcd(i,n)} \]

然后我们可以枚举gcd

\[\sum_{d|n}\sum_{i=1}^n \frac{i*n}{d}[gcd(i,n)=d]=n\sum_{d|n}\sum_{i=1}^n \frac{i}{d}[gcd(i,n)=d] \]

然后正常的把\(gcd(i,n)=d\)换成\(gcd(i/d,n/d)=1\) ,同时将\(i=i/d\)

\[n\sum_{d|n}\sum_{i=1}^{n/d} i[gcd(i,n/d)=1] \]

同时使得\(d=n/d\)

\[n\sum_{d|n}\sum_{i=1}^{d} i[gcd(i,d)=1] \]

\(\sum_{i=1}^{d} i[gcd(i,d)=1]\)该部分等于\(d在[1,d]范围内互质数数值之和\)

就是\(\frac {\varphi(d)d}2(d=1时为1)\)

证明当\(d>1时,\varphi(d)总是偶数,与d互质的数总是成对出现,i与d互质,d-i与d也互质,他它们的合是d,并有\varphi(d)/2对\)

所以说答案是

\[n\sum_{d|n}\frac {\varphi(d)d}2 \]

再加上预处理,时间复杂度\(\Theta(nlogn+T)\)

posted @ 2025-08-10 07:15  _3449  阅读(96)  评论(0)    收藏  举报