数学基础
1. 数论
1.1 常用函数
下面是一些常用的函数,在本文中使用时默认读者了解,不做过多解释.
以下函数定义域均为正整数,值域均为整数:
- 单位函数:\(\epsilon(n) = [n=1]\)。
- 恒等函数:\(\text{id}_k(n) = n^k\),\(\text{id}_1(n)\) 通常被记作 \(\text{id}(n)\)。
- 常数函数:\(1(n) = 1\)。
- 除数函数:\(\sigma_k(n) = \sum_{d \mid n} d^k\)。\(\sigma_0(n)\) 通常被记作 \(d(n)\) 或 \(\tau(n)\),一般称之为 约数个数函数。而 \(\sigma_1(n)\) 通常被记作 \(\pi(n)\),一般称之为 约数和函数。
- 欧拉函数:\(\varphi(n) = \sum_{i=1}^n [\gcd(i, n) = 1]\)。
- 莫比乌斯函数:\(\mu(n) = \begin{cases} 1 & n = 1 \\ 0 & \exists d > 1, d^2 \mid n \\ {(-1)}^{\omega(n)} & \text{otherwise} \end{cases}\) ,其中 \(\omega(n)\) 表示 \(n\) 的本质不同质因子个数。
1.2 欧几里得算法
1.2.1 欧几里得算法
定理 1.2.1-1 对于任意的整数 \(a\) 和 \(b\),有 \(\gcd(a,b) = \gcd(b, a \bmod b)\)。
证明 显然,我们只需要证明 \(a,b\) 的公因数和 \(b, a \bmod b\) 的公因数是等价的。换句话说,我们需要证明两个命题:一个是对于任意的 \(d \mid a\) 且 \(d \mid b\),有 \(d \mid a \bmod b\);另一个是是对于任意的 \(d \mid b\) 且 \(d \mid a \bmod b\),\(d \mid a\)。这两个命题都是显然的,故原定理得证。\(\Box\)
显然,进行两场操作后 \(a\) 和 \(b\) 都会减半。这意味着,如果我们安装上面的式子不断操作下去,总操作次数是 \(O(\log \max \{a,b \})\) 次,是很优的。
这就是 欧几里得算法。它可以在 \(O(\log V)\) 的时间复杂度内算出两个数的最大公因数,其中 \(V\) 是数的值域。
1.2.2 扩展欧几里得算法
我们先要了解贝祖定理:
定理 1.2.2-1 对于任意的整数 \(a\) 和 \(b\),且它们不全为 \(0\),那么存在两个整数 \(x\) 和 \(y\),满足 \(ax + by = \gcd(a,b)\)。
证明 设集合 \(A = \{a u + b v \in \mathbb{Z}^+ \mid u,v \in \mathbb{Z}\}\),显然 \(A \neq \varnothing\),所以存在正整数 \(d\) 满足 \(d\) 是 \(A\) 中的最小元素,不妨令 \(d = ax + by\)。设 \(a = p d+q\),其中 \(0 \leq q < d\),那么有 \(q = a - pd = a - p(ax + by) = (1 - px)a+(-py)b \in A \cap \{ 0\}\)。又 \(q < d\) 且 \(d\) 为 \(A\) 中的最小元素,所以 \(q \notin A\),故 \(q = 0\),所以 \(d \mid a\)。同理,\(d \mid b\),那么 \(d \mid \gcd(a, b)\),即 \(ax + by \mid \gcd(a, b)\)。又 \(\gcd(a, b) \mid a\) 且 \(\gcd(a, b) \mid d\),所以 \(\gcd(a, b) \mid ax + by\),故 \(ax+by = \gcd(a, b)\),原定理得证。\(\Box\)
我们约定,下文中所指的不定方程系数均不为 \(0\)。
考虑一个不定方程 \(ax + by = c\),我们要求出它的一个解。首先,需要判是这个方程否有解:
定理 1.2.2-2 不定方程 \(ax + by = c\) 有解的充要条件是 \(\gcd(a,b) \mid c\)。
证明 根据贝祖定理,充分性是显然的。设一组解为 \(x=x_0, y=y_0\),那么 \(ax_0 + by_0=c\)。因为 \(\gcd(a, b) \mid a\) 且 \(\gcd(a, b) \mid b\),所以 \(\gcd(a, b) \mid ax_0 + by_0\),也就是 \(\gcd(a, b) \mid c\),那么必要性也得证。\(\Box\)
判断有解之后,我们需要找出一组解。事实上,我们只需解出不定方程 \(ax + by = \gcd(a, b)\) 即可。考虑使用 定理 1.2.1-1,有 \(\gcd(a, b)= \gcd(b, a \bmod b)\),那么我们能否将系数替换为 \(b, a \bmod b\),再通过这个不定方程的解反推原方程的解呢?答案是肯定的:
定理 1.2.2-3 设不定方程 $ b x + (a \bmod b) y = \gcd(b, a \bmod b)$ 的一组解为 \(x = x_0,y=y_0\),那么不定方程 \(ax + by = c\) 的一组解为 $ x = y_0,y = x_0 - \lfloor \frac{a}{b} \rfloor y_0$。
证明 由于 \(a \bmod b = a - \lfloor \frac{a}{b} \rfloor b\),将 \(x = y_0,y = x_0 - \lfloor \frac{a}{b} \rfloor y_0\) 带入不定方程 \(ax + by = c\) 即可证。\(\Box\)
有了上面的定理后,我们可以仿照欧几里得算法写一个递归函数,时间复杂度分析完全一样,依旧是 \(O(\log V)\) 级别的。由于这个算法与欧几里得算法极其相似,并且严格强于欧几里得算法,所以这个算法被叫做 扩展欧几里得算法。
其实,这种方法还有个别名,叫做 辗转相除法。
1.3 积性函数与筛法
1.3.1 积性函数
有如下几个定义:
定义 1.3.1-1 称一个函数 $ f(x)$ 为 数论函数,当且仅当它的定义域为正整数。
定义 1.3.1-2 称一个数论函数 $ f(n)$ 为 积性函数,当且仅当对于任意的一对互质的正整数 \(x,y\),有 \(f(xy) = f(x)f(y)\)。
定义 1.3.1-3 称一个数论函数 $ f(n)$ 为 完全积性函数,当且仅当对于任意的一对正整数 \(x,y\),有 \(f(xy) = f(x)f(y)\)。
积性函数的性质在此不多赘述。
1.3.2 筛法
筛法主要针对于积性函数。考虑积性函数 \(f(n)\),如果对于任意质数 \(p\) 和正整数 \(k\),可以在 \(O(1)\) 时间内计算 \(f(p^k)\),那么我们就可以在线性时间内求出 \(f(1)\) 到 \(f(n)\)。
怎么做呢?假设现在要求 \(f(x)\),考虑从 \(x\) 的最小质因子处筛掉 \(x\)。具体地,令 \(p\) 为 \(x\) 的最小质因子,设 \(g_x\) 表示最大的 \(t\) 满足 \(t = p^k\) 且 \(t \mid x\),其中 \(k\) 为正整数,再记 \(x = p y\),那么 \(g_x\) 有递推式:
对于 \(f(x)\),若 \(g_x = x\),那么 \(x\) 一定是一个质数的幂次,所以可以 \(O(1)\) 计算。否则,有递推式 \(f(x) = f(\frac{x}{g_x})f(g_x)\)。
1.4 费马小定理与欧拉定理
1.4.1 费马小定理
定理 1.4.1-1 对于任意素数 $ p$ 和正整数 $ a$,若 $ \gcd(a, p) = 1$,则 $ a^{p-1} \equiv 1 \pmod p$。
证明 考虑序列 \(a,2a,3a,\dots ,(p-2)a,(p-1)a\),显然,在模 \(p\) 意义下,它们之间的任意两个数(位置不同)都是不同的,且均不为 \(0\)。否则,对于 \(1 \leq x < y < p\),如果 \(xa \equiv ya \pmod p\),那么有 \(p \mid (y - x) a\)。又 \(\gcd(a, p) = 1\),所以 \(p \mid y - x\)。由于 \(y \neq x\),所以 \(y - x \geq p\),也就是 \(y \geq p + x\)。但 \(x \geq 1\),所以 \(y \geq p + 1\),显然矛盾。根据上面的结论,显然有 \(a^{p-1} (p-1)! = \prod_{i=1}^{p-1} a i \equiv (p-1)! \pmod p\)。又 \(\gcd((p-1)!, p) = 1\),所以 \(a^{p-1} \equiv 1 \pmod p\)。\(\Box\)
这个定理由费马最先提出,为了区别于 费马大定理,我们称之为 费马小定理。它常用于逆元的求解。
1.4.2 欧拉定理
定理 1.4.2-1 对于任意的正整数 $ p$ 和 $ a$,若 $ \gcd(a, p) = 1$,则 $ a^{\varphi(p)} \equiv 1 \pmod p$。
证明 设 \(r_1,r_2,r_3, \dots ,r_{\varphi(p)-1}, r_{\varphi(p)}\) 为 \(\varphi(p)\) 个小于 \(p\) 且与 \(p\) 互质的数,它们包含了所有小于 \(p\) 且与 \(p\) 互质的数。显然,对于任意的 \(1 \leq i < j \leq \varphi(p)\),有 \(a \cdot r_i \not\equiv a \cdot r_j \pmod p\)。这意味着 \(a \cdot r_1, a \cdot r_2, a \cdot r_3, \dots ,a \cdot r_{\varphi(p) - 1}, a \cdot r_{\varphi(p)}\) 这 \(\varphi(p)\) 个数在模 \(p\) 意义下互不相同。同时,对于任意的 \(1 \leq i \leq \varphi(p)\),都存在一个 \(1 \leq j \leq \varphi(p)\),满足 \(a \cdot r_i \equiv r_j \pmod p\)。否则,令 \(a \cdot r_i \equiv q \pmod p\),且 \(\gcd(p,q) > 1\),那么有 \(a \cdot r_i = kp + q\),所以 \(\gcd(a \cdot r_i, p) = \gcd(kp + q, p)\)。由 定理 1.2.1-1,\(\gcd(kp+q,p) = \gcd(p, q) > 1\),那么有 \(\gcd(a \cdot r_i, p) = \gcd(p, q) > 1\),但 \(a,r_i\) 均与 \(p\) 互质,矛盾。结合上述性质,容易发现 \(a \cdot r_1, a \cdot r_2, a \cdot r_3, \dots ,a \cdot r_{\varphi(p) - 1}, a \cdot r_{\varphi(p)}\) 与 \(r_1,r_2,r_3, \dots ,r_{\varphi(p)-1}, r_{\varphi(p)}\) 一一对应。这样,我们有 \(a^{\varphi(p)} \prod_{i=1}^{\varphi(p)} r_i = \prod_{i=1}^{\varphi(p)}a\cdot r_i \equiv \prod_{i=1}^{\varphi(p)} r_i\pmod p\)。又 \(\gcd(\prod_{i=1}^{\varphi(p)} r_i, p) = 1\),所以 \(a^{\varphi(p)} \equiv 1 \pmod p\)。\(\Box\)
这个定理由欧拉最先提出,被称为 欧拉定理。
1.4.3 扩展欧拉定理
定理 1.4.3-1 对于任意的正整数 $ p, a$ 和 $ b$,有 $ a^b \equiv \begin{cases} a^{\varphi (p)} & \gcd(a, p) = 1 \ a^b & \gcd(a, p) \neq 1, b < \varphi(p) \ a^{(b \bmod \varphi(p)) + \varphi(p)} & \gcd(a, p) \neq 1, b \geq \varphi(p) \end{cases} \pmod p$。
这个定理与欧拉定理极其相似并且严格强于欧拉定理,所以被称为 扩展欧拉定理。证明极其复杂,我不会。
这个定理主要用来降幂。如果指数特别大时,可以使用这个定理,将指数大小降为 \(O(p)\) 的,\(p\) 是模数。
1.5 中国剩余定理
1.5.1 中国剩余定理
如何求解一个线性同余方程组呢?有如下定理:
定理 1.5.1-1 考虑一个有 $ k$ 个方程的线性同余方程组,第 \(i\) 个方程为 \(x \equiv a_i \pmod {n_i}\),其中 \(n_1,n_2,n_3,\cdots ,n_{k-1}, n_k\) 两两互质。设 \(n = \prod_{i=1}^k n_i\),记 \(m_i = \frac{n}{n_i}\),\(m_i^{-1}\) 为 \(m_i\) 在模 \(n_i\) 意义下的逆元。则原方程组在模 \(n\) 意义下的唯一解为 \((\sum_{i=1}^{k} a_i m_i m_i^{-1} )\bmod n\)。
证明 先证合法性。事实上,我们只需要证明 \(\sum_{i=1}^{k} a_i m_i m_i^{-1}\) 合法。对于任意的 \(1 \leq t \leq k\),有 \(\sum_{i=1}^{k} a_i m_i m_i^{-1} \equiv a_t m_t m_t^{-1} \equiv a_t \pmod {n_t}\),合法性得证。再证唯一性,考虑原方程组的两个解 \(x_1,x_2\),显然,对于任意的 \(1 \leq i \leq k\),有 \(x_1 \equiv x_2 \pmod {n_i}\),这意味着 \(x_1-x_2\) 为所有 \(n_i\) 的倍数。由于 \(n_1,n_2,n_3,\cdots ,n_{k-1}, n_k\) 两两互质,所以 \(x_1 - x_2\) 也为 \(n\) 的倍数,即 \(x_1 \equiv x_2 \pmod n\)。\(\Box\)
它最初源于韩信点兵的故事,被称为 中国剩余定理。
1.5.2 扩展中国剩余定理
定理 1.5.2-1 对于两个线性同余方程 \(x \equiv a_1 \pmod {n_1}\) 和 \(x \equiv a_2 \pmod {n_2}\),将它转化为不定方程,即 $ x = n_1 p + a_1 = n_2 q + a2$,即 $ n_1p-n_2q = a_2 - a_1$。当且仅当 $ \gcd(n_1, n_2) \mid a_2 - a_1$ 时原方程有解,解为 $ (n_1 p + a_1) \bmod \operatorname{lcm}(n_1, n_2)$,此时原方程等价于 $ x \equiv n_1p+a_1 \pmod {\operatorname{lcm}(n_1,n_2)}$。
证明是显然的,在此不多赘述。
那么,如何求解模数不互质时的线性同余方程组呢?使用上面的定理将方程组两两合并即可。由于上面的定理与中国剩余定理解决的是同一类问题且严格强于中国剩余定理,它被称之为 扩展中国剩余定理。
1.6 整除分块
考虑和式 \(\sum_{i=1}^n f(i)g(\lfloor \frac{n}{i} \rfloor)\),如果我们可以在 \(O(1)\) 时间内计算一段区间的 \(f(x)\) 的和,且在 \(O(1)\) 时间内计算 \(g(x)\),那么我们就可以在 \(O(\sqrt{n})\) 时间内计算整个和式。
如果你写出所有的 \(\lfloor \frac{n}{i} \rfloor\),你会发现它的值不会太多。事实上,有如下定理:
定理 1.7-1 对于正整数 $ n$,设集合 $ S = { \lfloor \frac{n}{i} \rfloor \mid 1 \leq i \leq n, i \in \mathbb{N} }$,那么有 $ \lvert S \rvert = O(\sqrt{n})$。
证明 如果 \(i \leq \sqrt{n}\),那么显然 \(\lfloor \frac{n}{i} \rfloor\) 取值只有 \(O(\sqrt{n})\) 种。否则,\(\lfloor \frac{n}{i} \rfloor \leq O(\sqrt{n})\),也只有 \(O(\sqrt{n})\) 种。所以总共有 \(O(\sqrt{n})\) 种取值。\(\Box\)
定理 1.7-2 对于正整数 $ n$ 和 $ i$,满足 $ \lfloor \frac{n}{i} \rfloor = \lfloor \frac{n}{j} \rfloor$ 且 $ i \leq j \leq n$ 的正整数 $ j$ 的最大值为 $ \lfloor \frac{n}{\lfloor \frac{n}{i} \rfloor} \rfloor$。
证明 显然,\(\lfloor \frac{n}{\lfloor \frac{n}{i} \rfloor}\rfloor \geq \lfloor \frac{n}{\frac{n}{i}} \rfloor = i\),所以 \(j \leq \lfloor \frac{n}{\lfloor \frac{n}{i} \rfloor} \rfloor\)。又 \(\lfloor \frac{n}{\lfloor \frac{n}{\lfloor \frac{n}{i} \rfloor}\rfloor} \rfloor = \lfloor \frac{n}{i} \rfloor\),所以 \(j\) 的最大值为 \(\lfloor \frac{n}{\lfloor \frac{n}{i} \rfloor} \rfloor\)。\(\Box\)
有了上述定理后,我们可以不断地将指针从 \(i\) 跳到 \(\lfloor \frac{n}{\lfloor \frac{n}{i} \rfloor}\rfloor\),跳的过程中不断求出区间和。由于区间内 \(\lfloor \frac{n}{i} \rfloor\) 的值是相同的,所以我们只需要求出 \(f(x)\) 的区间和即可。由于 \(\lfloor \frac{n}{i} \rfloor\) 的取值数是 \(O(\sqrt{n})\) 的,所以跳的次数是 \(O(\sqrt{n})\) 的。又因为求区间和是 \(O(1)\) 的,所以总复杂度是 \(O(\sqrt{n})\)。
如果和式是多维的,那么我们每次跳的时候右端点取所有维度的理论右端点的最小值即可。
未完待续...

浙公网安备 33010602011771号