莫比乌斯反演基础

前言:
这一部分有些难度
祝各位学过或没学过莫反的 \(dalao\)不被作者垃圾的实力恶心到顺利速通莫反

Part 00 Reason

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

主要来说,莫反可以理解成一个公式
有的时候把他套进去可以加速一个数学公式的运算
具体我也说不好
我们先看下面

Part 01 前置知识

一、一种卷积

本文所写的卷积,均为狄利克雷卷积
别的我也不会啊
这个玩应是啥呢?
首先要明确这个东西是给两个函数用的
而且一般是数论函数,也就是定义域和值域都在整数上的函数
两个函数的狄利克雷卷积是什么呢?
对于两个数论函数 \(f(x)\)\(g(x)\),则它们的狄利克雷卷积得到的结果 \(h(x)\) 定义为:

\[h(x)=\sum_{d\mid x}{f(d)g\left(\dfrac xd \right)} \]

上式可以简记为:

\[h=f*g \]

你可能并没有看懂这一段讲了些什么
说白了如果有两个函数
你想把它们乘起来
比如说两个函数都是简单的常函数 \(1(x)=1\)
这个函数无论你传入的值是几都会返回一
他们卷起来是什么呢?
我们套一下定义

\[h(x)=\sum_{d|x}{1(d)*1(\frac{x}{d})}=\sum_{d|x}{1} \]

你会发现他其实就是一个约数个数函数
这个东西他有一些性质

  1. 交换律 \(a*b=b*a\)
  2. 结合律 \((f*g)*h=f*(g*h)\)
  3. 分配律 \((f+g)*h=(f*h)+(g*h)\)
  4. 积型函数性质 \(a*b=c\) 。若 \(a,b\) 均为积型函数,则 \(c\) 也为积型函数

二、一波分块

例如,求 \(\sum_{i=1}^n{\lfloor \frac{n}{i}\rfloor}\)
这个我们正常做题是 \(O(n)\)
但我们发现他可以有的一样的只算一次
而可以求出结果为 \(k\) 的最大值为 \(\lfloor \frac{n}{k}\rfloor\)
然后就可以 \(O(\sqrt{n})\) 乱搞了

三、一个符号

\([P]=(P=true)?1:0\)

四、一些函数

单位函数 \(e(x)=[x=1]\)
常数函数 \(1(x)=1\)
\(ID\) 函数 \(ID(x)=x\)
因数个数 \(d(n)=\sum_{d|n}1\)
莫比乌斯函数 \(\mu(x)=\begin{cases}0\qquad\qquad(k_i>=2)\\(-1)^n\qquad(k_i=1)\end{cases}\)
其中使用了唯一分解定理 \(x= p_1^{k_1}*p_2^{k_2}*...*p_n^{k_n}\)
注意:这些函数都是积性函数

Part 02 莫反

公式一

莫反有一个最基本的公式为 \(\sum_{d|x}\mu(d)=[x=1]\)
证明:
这个函数可以表示为 \(\sum_{d|x}\mu(d)1(\frac{x}{d})=\mu*1\)
所以原函数是一个积型函数
所以我们先考虑 \(x=p^k\) 的情况
首先我们发现打表出来 \(\mu(x)\) 的值分别为 \([1,-1,0,0,0,...]\)
做个前缀和就变成了 \([1,0,0,0,0,...]\)
然后你发现他只有在 \(n=1\) 的时候有值为一
所以再唯一分解定理搞一下就可以了。。。

公式二

有一个离谱的公式 \(\phi*1=id\)
这个公式咋搞呢
首先注意到哦两边都是积性函数
只需要考虑 \(x=p^k\)
所以 \(\phi*1(p^k)=\sum_{d|p^k}{phi(d)}=1+p^k-p^{k-1}+p^{k-1}-p^{k-2}+...=1+p^k-1=p^k=id\)
这个式子两边同时卷上一个 \(\mu\) 就得到了一个离谱公式

\[\phi*1*\mu=id*\mu \]

\[\phi(x)=\sum_{d|x}d*\mu(\frac{x}{d}) \]

ending

是的,然后就没了!没了!没了!
我知道这很抽象,但没了,确实没了
算了拓展一点
公式一他其实是啥
其实是 \(\mu*1=e\)
你可能会好奇为啥他叫单位元
因为 \(e*f=f\)
你可以手推一下

Part 03 例题

P1390 公约数的和

给定 \(n\),求\(\sum_{i = 1}^n \sum_{j = i + 1}^n \gcd(i, j)\)
\(2 \leq n \leq 2 \times 10^6\)

Solution

首先根据你并没有一点的莫反经验
\(\gcd\) 这个东西我们是不会搞的
我们唯一莫反可以求的就是 \([x=1]\)
所以我们也这么搞一下
首先用一个很抽象的转化
\(\sum_{i = 1}^n \sum_{j = i + 1}^n \sum_{d=1}^n {[\gcd(i, j)==d]*d}\)
这个我们还是不会搞
所以我们把 \(i,j\) 同时变成原来的 \(d\)
变成
\(\sum_{d=1}^n d* \sum_{i = 1}^{\lfloor\frac{n}{d}\rfloor} \sum_{j = i + 1}^{\lfloor\frac{n}{d}\rfloor} {[\gcd(i, j)==1]}\)
后面的等于一很 \(nice\) 我们上公式
\(\sum_{d=1}^n d* \sum_{i = 1}^{\lfloor\frac{n}{d}\rfloor} \sum_{j = i + 1}^{\lfloor\frac{n}{d}\rfloor} \sum_{k|gcd(i,j)} \mu(k)\)
然后强度在此处
你发现后面这一坨我们并不知道怎么去搞
此时我们就可以考虑改变枚举顺序了
经过一波思考我们发现这个东西他是可以搞成这样
\(\sum_{d=1}^n d* \sum_{k=1}^{\lfloor\frac{n}{d}\rfloor} \mu(k) \sum_{i = 1}^{\lfloor\frac{n}{d}\rfloor} \sum_{j = i + 1}^{\lfloor\frac{n}{d}\rfloor} [k|i\ and\ k|j]\)
你发现这个 \(j=i+1\) 相当的离谱
于是你把式子做了一些小修改
\(\sum_{d=1}^n d \sum_{k=1}^{\lfloor\frac{n}{d}\rfloor} \mu(k)(\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor} \sum_{j=1}^{\lfloor\frac{n}{d}\rfloor}\ [k|i\ and\ k|j]-\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor} \sum_{j=1}^{i}\ [k|i\ and\ k|j])\)
可能就需要一定的数论知识了
\(\sum_{d=1}^n d \sum_{k=1}^{\lfloor\frac{n}{d}\rfloor} \mu(k)(\lfloor\frac{n}{dk}\rfloor \lfloor\frac{n}{dk}\rfloor-\lfloor\frac{n}{dk}\rfloor\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\lfloor\frac{i}{k}\rfloor)\)

posted @ 2025-03-29 18:27  2025ing  阅读(57)  评论(2)    收藏  举报