首页 > 编程语言 >【算法】莫比乌斯反演

【算法】莫比乌斯反演

时间:2024-01-15 21:56:19浏览次数:29  
标签:frac gcd 乌斯 sum mu 反演 莫比 mathbf 函数

参考博客

OI-Wiki | Biuld-数学 | Million-组合计数学习笔记 | 狄利克雷卷积和莫比乌斯反演 | 算法学习笔记(35): 狄利克雷卷积

狄利克雷卷积

莫反的前置知识,主要引入了一个新运算。

常用积性函数

  1. 单位函数
    \(\varepsilon(n)=\begin{cases}1&n=1\\0&\text{otherwise}\end{cases}\)
  2. 幂函数
    \(Id_k(n)=\begin{cases}n^k\\n&k=1\\1&k=0\end{cases}\)

当 \(k=1\) 时,\(Id_k(n)\) 也等价于恒等函数 \(Id(n)\);当 \(k=0\) 时,\(Id_k(n)\) 等价于常数函数 \(1\)\((n)\)。

注意这里的恒等函数和常数函数读者虽感觉没什么用,显然可以不用函数表达,但是请注意只有数论函数才能进行下面将要提到的狄利克雷卷积运算,所以这两个函数式必不可少的。并且这里的 \(\mathbf{1}(n)\) 中的 \(\mathbf{1}\) 不是 \(1\),而是加粗后的 \(\mathbf{1}\),代表常数函数,请注意区分。

  1. 除数函数
    \(\sigma_k(n)=\begin{cases}\sum\limits_{d|n} d^k\\\sum\limits_{d|n} d&k=1\\\sum\limits_{d|n}1&k=0\end{cases}\)

当 \(k=1\) 时,\(\sigma_k(n)\) 等价于因数函数 \(\sigma(n)\);当 \(k=0\) 时,\(\sigma_k(n)\) 等价于个数函数 \(d(n)\)。

  1. 欧拉函数
    \(\varphi(n) = \prod_{i = 1}^n p_i^{a_i - 1}(p_i -1) = n \prod_{i = 1}^n (1 - \frac{1}{p_i})\\\varphi(p^k)=p^k-p^{k-1}=(p-1)p^{k-1}\)

这里只有欧拉函数的计算式,详情可以自行搜索一下。

定义

狄利克雷卷积是定义在数论函数间的二元运算,可以理解为一种新运算方式,运算符号为 $ * $。

定义式为:

\[(f * g)(n)=\sum\limits_{d|n} f(d)g(\frac{n}{d}) \]

也可表示为:

\[(f * g)(n)=\sum\limits_{ij=n}f(i)g(j) \]

定理

  1. 若 \(f,g\) 都为积性函数,那么 \(f * g\) 也为积性函数
  2. 交换律:\(f * g=g * f\)
  3. 结合律:\((f * g) *h=f * (g * h)\)
  4. 分配律 \(f * (g+h)=f * g+f * h\)

特殊函数的卷积

  1. \(Id_k * \mathbf{1}=\sigma\)

\((Id_k * \mathbf{1})(n)=\sum\limits_{d|n} d^k\times 1=\sigma_k(n)\)

  1. \(\varphi * \mathbf{1}=Id\)

从简单的情况分析,假设 \(n=p^q\)

\((\varphi * \mathbf{1})(n)=\sum\limits_{d|n} \varphi(d)=\varphi(1)+\sum\limits_{i=1}^q \varphi(p^i)=1+\sum\limits_{i=1}^q p^i-p^{i-1}=p^q=n\)

考虑普遍情况,分解 \(n=\prod p_i^{q_i}\)

\((\varphi * \mathbf{1})(n)=(\varphi * \mathbf{1})(\prod p_i^{q_i})=\prod(\varphi * \mathbf{1})(p_i^{q_i})=\prod p_i^{q_i}=n=Id\)

  1. \(\mathbf{1} * \mathbf{1}=d\)

\((\mathbf{1} * \mathbf{1})(n)=\sum\limits_{d|n} 1=d\)

  1. \(\sigma =\varphi * d\)

从前三条可推出本条式子,\(\sigma=Id * 1=\varphi * 1 *1=\varphi * d\)

单位元和逆

对于狄利克雷卷积,单位元 \(\tau * f=f\),由此不难得出狄利克雷卷积的单位元为 \(\varepsilon\)。

与此相对的定义式逆,对于狄利克雷卷积,狄利克雷逆 \(g * f=\varepsilon\),记作 \(f^{-1}\)。由此显然可得若一个函数 \(f\) 存在狄利克雷逆的充要条件是 \(f(1)\ne 0\)。

莫比乌斯反演

莫比乌斯函数

定义莫比乌斯函数 \(\mu=\mathbf{1^{-1}}\)。普通定义式为 \(\mu(n)=\begin{cases}1&n=1\\0&\text{n存在平方因子}\\-1^k&{k 为 n质因子个数}\end{cases}\)。

莫比乌斯反演

由莫比乌斯函数可得,\(g=f * \mathbf{1}\Leftrightarrow f=g * \mu\)

?感觉铺垫的很长,结束的很潦草?

一个莫比乌斯反演的经典结论是 \(\sum_{d|gcd(i,j)} \mu[d]=[\gcd(i,j)=1]\)。考虑证明这个式子。

由莫比乌斯函数的定义可知,\(\mu * \mathbf{1}=\varepsilon\),所以 \(\sum_{d|n}\mu(d)=\varepsilon(n)\)。令 \(n=\gcd(i,j)\),再将 \(\varepsilon\) 的定义带进去,便得出了上面的式子。

应用

  1. 经典转化

对于 \(\sum_{i=1}^n\sum_{j=1}^n \gcd(i,j)\) 这一类的问题,可以考虑转化为枚举 \(\gcd\) 值变为 \(\sum_{d=1}^n d\sum_{i=1}^n\sum_{j=1}^n[gcd(i,j)=d]\),再令 \(i=Id,j=Jd\),带回去就是 \(\sum_{d=1}^n d\sum_{Id=1}^n\sum_{Jd=1}^n[gcd(Id,Jd)=d]\),同时除以一个 \(d\) 并把 \(I,J\) 变回 \(i,j\) 式子就改写成 \(\sum_{d=1}^n d\sum_{i=1}^{\frac{n}{d}}\sum_{j=1}^{\frac{n}{d}}[gcd(i,j)=1]\)。

再用上面的结论将它反演成 \(\sum_{d=1}^n d\sum_{i=1}^{\frac{n}{d}}\sum_{j=1}^{\frac{n}{d}}\sum_{k|\gcd(i,j)} \mu(k)\),换一下枚举顺序变为 \(\sum_{d=1}^n d\sum_{k=1}^{\frac{n}{d}}\mu(k)\sum_{i=1}^{\frac{n}{d}}[k|i]\sum_{j=1}^{\frac{n}{d}}[k|j]\)。发现 \(\sum_{i=1}^{\frac{n}{d}}[k|i]=\lfloor\frac{n}{k}\rfloor\),于是式子变为 \(\sum_{d=1}^n d\sum_{k=1}^{\frac{n}{d}}\mu(k)\lfloor\frac{n}{kd}\rfloor^2\)。

接着我们令 \(T=kd\),枚举 \(T\),式子变为 \(\sum_{T=1}^n\lfloor\frac{n}{T}\rfloor^2\sum_{d|T}d\mu(\frac{T}{d})\),后面这个东西发现很能预处理,再整除分块一下,然后就可以做到 \(O(\sqrt n)\) 了。

  1. \(\gcd\) 为质数

跟上面的差不蛮多,只是最后的式子变成 \(\sum_{T\in prime} \lfloor\frac{n}{T}\rfloor^2\sum_{d|T} \mu(\frac{T}{d})\),导致预处理的时候发生一点小变化而已。


3. 序列上的 $lcm$

和上面那个很像,但用的比较多还是提一下。跟上面一样的就一笔带过了。下面的式子 \(n\) 代表序列长度,\(m\) 代表值域。

\[\sum_{i=1}^n\sum_{j=1}^nlcm(a_i,a_j)=\sum_{i=1}^n\sum_{j=1}^n\frac{a_ia_j}{\gcd(a_i,a_j)}\\ =\sum_{d=1}^m\sum_{i=1}^n\sum_{j=1}^n \frac{a_ia_j}{d}[\gcd(a_i,a_j)=d] \]

这个序列上的值看的就很让人难受,开个桶 \(b_i=\sum_{j=1}^n [a_j=i]\),就可以继续往下化了

\[\sum_{d=1}^m\sum_{i=1}^n\sum_{j=1}^n \frac{a_ia_j}{d}[\gcd(a_i,a_j)=d]\\ =\sum_{d=1}^m\sum_{i=1}^n\sum_{j=1}^n b_ib_j\times\frac{ij}{d}[\gcd(i,j)=d]\\ =\sum_{d=1}^m\sum_{i=1}^{\frac{n}{d}}\sum_{j=1}^{\frac{n}{d}} b_{id}b_{jd}\times ijd[\gcd(i,j)=1]\\ =\sum_{d=1}^m d\sum_{i=1}^{\frac{n}{d}}\sum_{j=1}^{\frac{n}{d}} b_{id}b_{jd}\times ij\sum_{k|\gcd(i,j)}\mu(k)\\ =\sum_{d=1}^m d\sum_{k=1}^{\frac{m}{d}}\mu(k)\sum_{i=1}^{\frac{n}{d}}i[k|i]\times b_{id}\sum_{j=1}^{\frac{n}{d}}b_{jd}\times j [k|j]\\ \]

这时候发现后面这些带 \([k|i]\) 之类的东西就十分的烦了,因为它代表的是 \([1,\frac{n}{d}]\) 中所有 \(k\) 的倍数的和,而 \(k\) 每次又不一样,即不能整除分块又不能预处理。因此我们考虑令 \(i=Ik,j=Jk\),这样强制满足 \(i,j\) 是 \(k\) 的倍数,然后再同时除以一个 \(k\)。式子可化为

\[\sum_{d=1}^m d\sum_{k=1}^{\frac{m}{d}}\mu(k)\sum_{i=1}^{\frac{n}{d}}i[k|i]\times b_{id}\sum_{j=1}^{\frac{n}{d}}b_{jd}\times j [k|j]\\ =\sum_{d=1}^m d\sum_{k=1}^{\frac{m}{d}}\mu(k)k^2\sum_{i=1}^{\frac{n}{dk}}i\times b_{idk}\sum_{j=1}^{\frac{n}{dk}}b_{jdk}\times j \\ \]

接着我们令 \(f(n)=\sum_{k=1}^n\mu(k)k^2\sum_{i=1}^{\frac{n}{k}}i\times b_{ik}\sum_{j=1}^{\frac{n}{k}}b_{jk}\times j \\\),前半关于 \(k\) 的部分显然可以直接预处理,后面的发现是相对独立的,直接把它变成 \((\sum\limits_{i=1}^{\frac{n}{k}}i\times b_{ik})^2\),然后可以 \(\log\) 暴力求。(ps:如果不是在序列中求的话后面这一块东西不会有含 \(b\) 次项,可以整除分块)。

原式就变成 \(\sum\limits_{d=1}^m d f(\lfloor\frac{n}{d}\rfloor)\),整除分块一下即可。

  1. 约数个数和

即求 \(\sum_{i=1}^n\sum_{i=1}^m d(ij)\),\(d(x)\) 表示 \(x\) 的约数和。这种题要用到一个公式,如下:

\(d(ij)=\sum_{x|i}\sum_{y|j}[gcd(x,y)=1]\)

考虑证明这个东西。先从简单的情况入手,令 \(i=p^a,j=p^b\),那么 \(ij=p^{a+b}\)。\(d(ij)=a+b+1\),也就是选 \(0\) 个 \(p\),选 \(1\) 个 \(p\)……选 \(a+b\) 个 \(p\)。而 \(\sum_{x|i}\sum_{y|j}[gcd(x,y)=1]=a+b+1\),也就是在 \(x\) 中选 \([1,a]\) 个同时在 \(y\) 中不选 \(p\),在 \(y\) 中选同时不在 \(x\) 中选,\(x,y\) 中都不选。 因此等式成立

然后开始正式地推式子:

\[\sum_{i=1}^n\sum_{i=1}^m d(ij)=\sum_{i=1}^n\sum_{i=1}^m\sum_{x|i}\sum_{y|j}[gcd(x,y)=1]\\ =\sum_{x=1}^n\sum_{y=1}^m \sum_{i=1}^n\sum_{j=1}^m[x|i][y|j][gcd(x,y)=1\\ =\sum_{x=1}^n\sum_{y=1}^m \lfloor\frac{n}{x}\rfloor\lfloor\frac{m}{y}\rfloor[gcd(x,y)=1]\\ =\sum_{x=1}^n\sum_{y=1}^m \lfloor\frac{n}{x}\rfloor\lfloor\frac{m}{y}\rfloor\sum_{d|\gcd(x,y)}\mu(d)\\ =\sum_{d=1}^{min(n,m)}\mu(d)\sum_{x=1}^n\sum_{y=1}^m \lfloor\frac{n}{x}\rfloor\lfloor\frac{m}{y}\rfloor[d|x][d|y]\\ =\sum_{d=1}^{min(n,m)}\mu(d)\sum_{x=1}^n\lfloor\rfloor\frac{n}{xd}\sum_{y=1}^m\lfloor\frac{m}{yd}\rfloor\\ \]

然后整除分块一下,结束。

后面的套路总结等我做多了题再回来总结awa

标签:frac,gcd,乌斯,sum,mu,反演,莫比,mathbf,函数
From: https://www.cnblogs.com/Cloote/p/17962982

相关文章

  • Landsat 7大气校正法的地表温度反演:ENVI实现
    本文介绍基于ENVI软件,实现对Landsat7遥感影像加以大气校正方法的地表温度反演操作。(基于ENVI的Landsat7地表温度(LST)大气校正方法反演与地物温度分析)1图像前期处理与本文理论部分更新:基于GEE的地表温度Landsat反演可以看谷歌地球引擎GEE批量计算Landsat地表温度,自动批量操作......
  • 各类反演总结
    反演就是有两个函数\(f\)和\(g\),可以简单得出\(g\)转化成\(f\)的式子,那么就可以从\(f\)推回\(g\)。内容:子集反演二项式反演莫比乌斯反演欧拉反演斯特林反演子集反演若\(f(S)=\sum_{T\inS}g(T)\),那么\(g(S)=\sum_{T\inS}(-1)^{|S|-|T|}......
  • 莫比乌斯函数平方前缀和
    考虑求\(\sum_{i=1}^n\mu(i)^2\)结论是\(\mu(i)^2=\sum_{j^2|i}\mu(j)\)考虑证明这个式子。先证明若\(\mu(i)\neq0\)此时\(\mu(i)^2=1\)显然只有\(j=1\)在右式造成贡献\(1\)等式成立。若存在\(j\neq1\)也在右式造成贡献,那么显然\(i\)有次数\(\ge2\)质因子了\(\mu(i)=0\)与......
  • 反演
    0.二项式反演0.1.形式\[F(n)=\sum_{i=0}^{n}(-1)^{i}{n\choosei}G(i)\iffG(n)=\sum_{i=0}^{n}(-1)^{i}{n\choosei}F(i)\]\[F(n)=\sum_{i=0}^{n}{n\choosei}G(i)\iffG(n)=\sum_{i=0}^{n}(-1)^{n-i}{n\choosei}F(i)\]\[F(x)=\sum_{i=x}^{n}......
  • 莫比乌斯反演
    定义\[\mu(n)=\begin{cases}1~~~~~~~~~~~~~~\text{(n=1)}\\0~~~~~~~~~~~~~~\text{(n存在完全平方因子)}\\(-1)^{\omega(n)}~~\text{(otherwise)}\end{cases}\]式子\[\sum_{d|n}\mu(d)=[n=1]\]证明:设\(n\)的本质不同质因子为\(p_1,p_2,...,p_k\),则选同一......
  • <学习笔记> 二项式反演
    容斥原理容斥原理的式子\[|A1∪A2∪...∪An|=\sum_{1≤i≤n}|Ai|−\sum_{1≤i<j≤n}|Ai∩Aj|+...+(−1)^{n−1}×|A1∩A2∩...∩An|\]一般来说不会直接用容斥原理这个式子,而是考虑一种特殊情况:交集的大小只与交集的数量有关。也就是说,我们可以用$f[x]$来表示\(n\)个集合的......
  • 反演与容斥 学习笔记
    反演与容斥学习笔记二项式反演函数\(f,g\),有以下结论:\[f_k=\sum_{i=0}^k\binom{k}{i}g_i\Longleftrightarrowg_k=\sum_{i=0}^k(-1)^{k-i}\binom{k}{i}f_i\]证明:考虑右式\[\begin{aligned}&\sum_{i=0}^k(-1)^{k-i}\binom{k}{i}f_k\\=&\sum_{i=0......
  • 莫比乌斯反演
    今日又一次学习了莫比乌斯反演,终于理解了。问题:求有多少数对\((x,y)\),\(1\lex\len\),\(1\ley\lem\),\(\gcd(x,y)=1\)。莫比乌斯函数:\(\mu(d)=\left\{\begin{matrix}1&d=1\\(-1)^k&d=\prod_{i=1}^{k}p_i(p_i\nep_j)\\0&else\end{matrix}\right.......
  • 狄利克雷卷积及常见函数与莫比乌斯反演
    QwQ文章目前没有题目,只有理论知识狄利克雷卷积狄利克雷卷积(DirichletConvolution)在解析数论中是一个非常重要的工具.使用狄利克雷卷积可以很方便地推出一些重要函数和公式,它在信息学竞赛和解析数论中至关重要.狄利克雷卷积是定义在数论函数间的二元运算.数论函数,是指定......
  • 容斥与简单反演乱写
    #defineTBDToBeDone......