数学

参考资料:

卷积与反演-luogu
狄利克雷卷积-知乎
狄利克雷卷积和莫比乌斯反演-知乎
莫比乌斯反演-oiwiki
整除分块-oiwiki

常用积性函数:

\(\bullet\) 单位函数 \(\varepsilon(n)\text{ = }\begin{cases}\text{1, while n=1}\\\text{0, otherwise}\end{cases}\)

\(\bullet\) 幂函数 \(\begin{cases}Id_k(x)\text{ = }x^k\\Id(x)\text{ = }x\text{, }k\text{ = }1\\1(x)\text{ = }1\text{, }k\text{ = }0\end{cases}\)

\(\circ\) 除数函数 \(\begin{cases}\sigma_k(n)\text{ = }\Sigma_{d\mid{n}}\text{ }d^k\\\sigma(n)\text{ = }\Sigma_{d\mid{n}}\text{ }d\text{, }k\text{ = }1\\d(n)\text{ = }\Sigma_{d\mid{n}}\text{ }1\text{, }k\text{ = }0\end{cases}\)

\(\circ\) 欧拉函数 \(\varphi(n)\text{ = }\Sigma_{i = 2}^n\text{ }\left[n\perp i\right]\text{ = }n\times\Pi_{p\mid{n}}\ \frac{p-1}{p}(p\in \{prime\})\)

其中 \(\bullet\) 表示完全积性函数

因为这些都是积性函数,它们都满足 \(f(1) = 1\)
(我们常用 \(f, g, h\) 来代表函数,在本篇中用来表示积性函数较多

狄利克雷卷积

狄利克雷卷积是定义在数论函数间的二元运算。
定义式为:

以下出现的 \(*\) 不是我们常理解的乘,而是卷

\[(f*g)(n)\text{ = }\Sigma_{ij=n}\text{ }f(i)g(j) \]

也会写为:

\[(f *g)(n)\text{ = }\Sigma_{d\mid{n}}\text{ }f(d)g(\tfrac{n}{d}) \]

且若 \(f,g\) 是积性函数,则 \(f * g\) 也是积性函数

特殊函数的卷积:

  1. \(Id_k * 1\text{ = }\sigma_k\)
  2. \(\varphi * 1\text{ = }Id\)
  3. \(1 * 1\ =\ d\)

有趣的运算:
\(\sigma\ =\ Id * 1\ =\ \varphi * 1 * 1\ =\ \varphi * d\)

性质:
交换律: \(f * g = g * f\)
结合律: \((f * g) * h = f * (g * h)\)
分配律: \(f * (g + h) = f * g + f * h\)

分配律只在函数加法下有效

单位元:
\((\varepsilon * f)(n)\text{ = }\Sigma_{xy = n}\text{ }\varepsilon(x)f(y)\text{ = }f(n)\) ,所以单位函数 \(\varepsilon\) 是狄利克雷卷积的单位元

逆元:
\(f * g\text{ = }\varepsilon\) ,则称 \(g\)\(f\)狄利克雷逆,记作 \(f^{-1}\)
一个函数 \(f\) 存在狄利克雷逆的充要条件是 \(f(1) \ne 0\) ,且一个函数的狄利克雷逆是唯一的。
\((f * g)^{-1}\text{ = }f^{-1} * g^{-1}\)
\(f\) 为积性函数的时候,\(f^{-1}\) 也是积性函数

莫比乌斯反演

这里我们补充一个积性函数:
\(\circ\) 莫比乌斯函数 \(\mu(n)\ =\ \begin{cases}1\qquad \ \ n=1\\0\qquad \ \ n\ \text{含有平方因子}\\(-1)^k\ \ k\ \text{为}\ n\ {的本质不同质因子个数}\end{cases}\)
嗯,很复杂,但没关系,我们只要记住它下面这个性质就好:

\[\sum\limits_{d\mid{n}} \mu(d)\ =\ \begin{cases}1\quad n=1\\0\quad n \ne 1\end{cases} \]


\(\Sigma_{d\mid{n}}\mu(d)\ =\ \varepsilon(n)\)
\(\mu * 1\ =\ \varepsilon\)
这说明,莫比乌斯函数是常数函数 \(1\) 的逆,也就是
\(1^{-1}\ =\ \mu\)

反演公式:
\(g = f * 1 \Leftrightarrow g * \mu = f\)
展开为:
\(g(n) = \Sigma_{d\mid{n}}\ f(d)\ \Leftrightarrow\ f(n) = \Sigma_{d\mid{n}}\ \mu(d)g(\tfrac{n}{d})\)

反演结论:

  1. \([gcd(i,j)\ =\ 1]\ =\ \Sigma_{d\mid{gcd(i,j)}}\ \mu(d)\)
    通过 \(\mu * 1\ =\ \varepsilon\) 可以快速并简单地证明出这点。
  2. \(\varphi = Id * \mu\)

线性筛 \(O(n)\) 求莫比乌斯函数:

很多积性函数都是可以通过线性筛 \(O(n)\) 求出的,只是方法不尽相同
mu[1] = 1;
for(int i = 2; i <= n; ++ i){
	if(!b[i]){
		s[++ tot] = i;
		mu[i] = -1;
	}
	for(int j = 1; j <= tot && i * s[j] <= n; ++ j){
		b[i * s[j]] = 1;
		if(!(i % s[j])){
			mu[i * s[j]] = 0;
			break;
		}
		mu[i * s[j]] = -mu[i];
	}
}

整除分块:

也常被称为数论分块

能用到整除分块的式子形式大抵是这样的:

\[\sum\limits_{i = 1}^n\ \lfloor \frac{n}{i} \rfloor \]

在很多数学题中会出现它,且我们用 \(O(n)\) 的复杂度去求有时是会超时的,怎么办呢?
通过打表发现许多 \(\lfloor \frac{n}{i} \rfloor\) 的值是相同的,并成一个块状分布。且可以发现对于每一个值相同的块,它最后一个位置为 \(n / (n / i)\) ,这样我们就可以 \(O(\sqrt{n})\) 计算了

参考代码:

for(int l = 1, r; i <= n; l = r + 1){
	r = (n / (n / l));
	ans += (r - l + 1) * (n / l);
}

有帮助的题:

Crash的数字表格 / JZPTAB

题意:
给定 \(n, m\) ,求

\[\sum\limits_{i=1}^{n} \sum\limits_{i=1}^{m}lcm(i,j) \]

很明显,推式子:

以下的式子默认 \(n <= m\)

\[\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}lcm(i,j) \]

\[\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}\frac{i\cdot j}{gcd(i,j)} \]

考虑枚举 \(gcd(i, j)\)

\[\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}\sum\limits_{d=1}^{n}\frac{i\cdot j}{d}[gcd(i,j)=d] \]

\(i, j\) 同时乘上 \(d\) (将 \([gcd(i,j)=d]\) 变为 \([gcd(i,j)=1]\)

\[\sum\limits_{d=1}^{n}\sum\limits_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{m}{d}\rfloor}i\cdot j\cdot d\cdot [gcd(i, j) = 1] \]

\[\sum\limits_{d=1}^{n}\sum\limits_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{m}{d}\rfloor}d\cdot i\cdot j\sum\limits_{k\mid{gcd(i,j)}} \mu(k) \]

再次将 \(i, j\) 全体乘 \(k\)

\[\sum\limits_{d=1}^{n}\sum\limits_{k=1}^{\lfloor\frac{n}{d}\rfloor}\sum\limits_{i=1}^{\lfloor\frac{n}{kd}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{m}{kd}\rfloor}d\cdot \mu(k)\cdot i\cdot j\cdot k^2 \]

\[\sum\limits_{d=1}^{n}d\sum\limits_{k=1}^{\lfloor\frac{n}{d}\rfloor}\mu(k)\cdot k^{2}\sum\limits_{i=1}^{\lfloor\frac{n}{kd}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{m}{kd}\rfloor}i* j \]

好,让我们猜猜这个式子的计算复杂度是多少。
.
.
.
\(O(n)\)
对,\(O(n)\) 。因为这个式子可以拆为两个整除分块来做。
直接说可能抽象了,我们再来拆拆式子,设

\[f(n, m) = \sum\limits_{k=1}^{n}\mu(k)\cdot k^2\sum\limits_{i=1}^{\lfloor\frac{n}{k}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{m}{k}\rfloor}i\cdot j \]

明显前半部分是可以 \(O(n)\) 预处理的,关于后半部分的计算,再设

\[g(n, m) = \sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}i\cdot j \]

\[g(n, m) = \tfrac{n\cdot (n+1)}{2}\times\tfrac{m\cdot (m+1)}{2} \]

于是

\[f(n, m) = \sum\limits_{k=1}^{n}\mu(k)\cdot k^{2}\cdot g(\lfloor\frac{n}{k}\rfloor, \lfloor\frac{m}{k}\rfloor) \]

呦,整除分块,复杂度 \(O(\sqrt{n})\)
再看看原式

\[\sum\limits_{d=1}^{n}d\cdot f(\lfloor\frac{n}{d}\rfloor,\lfloor\frac{m}{d}\rfloor) \]

多眼熟,又是整除分块,总体复杂度 \(O(\sqrt{n}* \sqrt{n})=O(n)\)

真tm牛逼(小声bb
posted @ 2023-09-09 09:27  Biuld  阅读(32)  评论(1编辑  收藏  举报