关于数论

· · 个人记录

以前学了很多数论内容,却都缺少了一个严谨的定义或是证明,这里将作一个补充。

基础

欧几里得算法

\text{Theorem 1.1}:\gcd(a,b)=\gcd(b,a\bmod b)

求解众所周知的 \gcd(a,b)

证明:注意到 a \bmod b=a-kb ,那么令 g=gcd(a,b) ,则 g\mid ag\mid b ,显然 g\mid a-kb

a=pgb=qg ,则有 p\bot q 。那么目标转为证明 q \bot p-kq ,即:

\text{Lemma 1.1}:q \bot p-q

不妨假设 \gcd(q,p-q)=d\neq 1 。那么有 d \mid p-qd \mid q ,则 d \mid p ,即 gcd(p,q)\neq 1 ,与 p\bot q 冲突,那么假设不成立。

定理得证。

乘法逆元

a\times a^{-1} \equiv 1 \pmod {p}

则称 a^{-1}a\bmod p 意义下的乘法逆元。

注意到前提条件是 \gcd(a,p)=1

证明:原式等价于 ax+kp=1 ,而显然 \gcd(a,p)\mid ax+kp ,那么 \gcd(a,p)\mid 1 ,即 \gcd(a,p)=1

严谨的定义可能需要用到域。

显然我们可以使用扩展欧几里得算法或费马小定理来获取逆元,但这里还有一种线性递推求解的方式。考虑:

p=ak+r

即:

r\equiv p \pmod a

我们有 r < a

那么:

\begin{aligned} ak+r &\equiv 0 \pmod p\\ r^{-1}\times k+a^{-1} &\equiv 0 \pmod p\\ a^{-1} &\equiv kr^{-1} \pmod p\\ \end{aligned}

费马小定理

\text{Theorem 1.2}:a^{p-1}\equiv 1 \pmod {p}

其中 a\nmid pp 为一个素数。

证明:注意到 a,2a,3a,\dots (p-1)a\bmod p 意义下是互不相同的。

假设存在 x,y<p , 使得 ax\equiv ay \pmod p 。而 a\bot p ,则有 x\equiv y \pmod p ,与定义不符。

那么有:

\begin{aligned} \prod_{k=1}^{p-1} ka&\equiv(p-1)!\pmod p\\ a^{p-1}\times (p-1)!&\equiv(p-1)!\pmod p\\ a^{p-1}&\equiv 1 \pmod p \end{aligned}

定理得证。

注意到证明过程中我们要求 \forall a<pa^{-1}\pmod p 存在。

欧拉函数

\varphi(n)=\sum_{k=1}^n[k\bot n]

其中 \varphi(n) 称欧拉函数,是积性函数。

考虑如何快速求取单个 \varphi(n) ,我们有:

\varphi(n)=n\times \prod_{p \mid n}\frac {p-1}p

其中 p 是一个素数。

考虑 n 的唯一分解形式:

n=\prod_{i=1}^m p_i^{k_i}

则有:

\begin{aligned} \varphi(n)&=\prod_{i=1}^m \varphi(p_i^{k_i})\\ &=\prod_{i=1}^m p_i^{k_i}-p_i^{k_i-1}\\ &=\prod_{i=1}^mp_i^{k_i}\times (1-\frac 1{p_i})\\ &=n\times \prod_{p \mid n}\frac {p-1}p \end{aligned}

另外注意到:

n=\sum_{d\mid n} \varphi(d)

对于 k\in [1,n] ,若 \gcd(n,k)=d ,则 \gcd(\dfrac nd,\dfrac kd)=1 ,那么 \varphi(\dfrac nd) 就对所有这样的 k 计数。且注意到每个 k 唯一对应一个 d ,那么每个 k 仅会被计数一次。因此我们枚举 n 的所有因子,也就不重不漏的考虑了所有 k\in[1,n]

欧拉定理

\text{Theorem 1.3}:a^{\varphi(m)}\equiv 1 \pmod{m}

其中 a\bot m

证明:仿照费马小定理的证明方式,我们注意到 ak_1,ak_2,\dots ak_{\varphi(m)}\bmod m 意义下是互不相同的,且根据引理1.1它们都与 m 互素。其中 \{k_{\varphi(m)}\} 构成了 \bmod m 意义下的缩系。

那么有:

\begin{aligned} \prod_{i=1}^{\varphi(m)}ak_i&\equiv \prod_{i=1}^{\varphi(m)} k_i \pmod m\\ a^{\varphi(m)}\times \prod_{i=1}^{\varphi(m)} k_i &\equiv \prod_{i=1}^{\varphi(m)} k_i \pmod m\\ a^{\varphi(m)}&\equiv 1 \pmod m\\ \end{aligned}

注意到以上的推导要求 a\{k_{\varphi(m)}\}m 互素。

杂项

中国剩余定理

\begin{cases} x\equiv a_1 \pmod {m_1}\\ x\equiv a_2 \pmod {m_2}\\ \cdots\\ x\equiv a_n \pmod {m_n}\\ \end{cases}

求解 x ,其中 m_1,m_2,\dots m_n 互素。

\text{Theorem 2.1}:x=\sum_{i=1}^nai\prod_{j\neq i}^n m_j\times\left(\left(\prod_{j\neq i}^n m_j\right)^{-1}\pmod{m_i}\right)

证明:其实这个定理来源于构造。

观察式子,不难发现在每个同余式中,除对应 a_i 项以外的系数均为 0 ,且 a_i 项的系数为 1 ,那么其必然满足约束。

且注意到若给 x 加上若干个 \prod_{i=1}^nm_i ,同余方程组仍然成立,即我们构造出的这个解是在 \bmod \prod_{i=1}^nm_i 意义下的。

而我们以上的推导均是在 \left(\prod_{j\neq i}^n m_j\right)^{-1}\pmod{m_i} 存在的前提下进行的,也就是说这里需要用到 m_1,m_2,\dots m_n 互素的条件。

扩展中国剩余定理

用于求解同余方程组的模数并不互素的情况。

我们考虑如何合并两个同余式:

\begin{cases} x \equiv a_1 \pmod {m_1}\\ x \equiv a_2 \pmod {m_2}\\ \end{cases}

显然其等价于:

\begin{cases} x = a_1 + k_1\times m_1\\ x = a_2 + k_2\times m_2\\ \end{cases}

联立可得:

k_1m_1-k_2m_2=a_2-a_1

我们解这个方程即可得出当前的解 x_0 。且注意到我们若给 x_0 加上若干个 \operatorname{lcm}(m_1,m_2) ,上式仍然成立,即当前的解是在 \bmod \operatorname{lcm}(m_1,m_2) 意义下的。这样我们得出新的同余式:

x\equiv x_0 \pmod {\operatorname{lcm}(m_1,m_2)}

与其它式子继续合并即可。

卢卡斯定理

\text{Theorem 2.2}:\binom{n}{m}=\binom{n\bmod p}{m\bmod p}\times \binom{\lfloor n \div p \rfloor}{\lfloor m \div p \rfloor} \pmod {p}

其中 p 为一个素数。

证明:首先我们需要证明这样一个引理:

\text{Lemma 2.1}:(a+b)^p\equiv a^p+b^p \pmod {p}

考虑 \large\binom{p}{m} 的形式,即 \dfrac{p^{\underline{m}}}{m!} 。那么由于 p 是一个素数,只有当 m0 或是 p 时,其不含 p 这个因子,否则 {\large\binom {p}{m}}\equiv 0 \pmod p 。则式 (a+b)^p\bmod p 意义下展开后只会包含 0 次和 p 次项,引理得证。

接下来我们考虑式 (1+x)^n ,有:

\begin{aligned} (1+x)^n &\equiv (1+x)^{p\times \lfloor n\div p\rfloor} \times (1+x)^{n \bmod p} \pmod p\\ (1+x)^n &\equiv (1+x^p)^{\lfloor n\div p\rfloor} \times (1+x)^{n \bmod p} \pmod p\\ \end{aligned}

考虑恒等号右边两式的卷积,式 (1+x^p)^{\lfloor n\div p\rfloor} 只具有 p 的倍数次项,式 (1+x)^{n \bmod p} 的次数小于 p ,那么对于结果中任意的一项 x^m ,其系数仅来源于 {\large\binom{\lfloor n\div p\rfloor}{\lfloor m\div p\rfloor}}\times {\large\binom{n \bmod p}{m \bmod p}} 这一种方式,对应到左式,即有 {\large\binom{n}{m}}={\large\binom{n\bmod p}{m\bmod p}}\times {\large\binom{\lfloor n \div p \rfloor}{\lfloor m \div p \rfloor}} \pmod {p} ,定理得证。

其实可以看出这是一种生成函数的证法。

扩展卢卡斯定理

其实就是模意义下快速阶乘算法。

目标是在模意义下快速计算组合数,但是此时我们不能保证模数 p 为一个素数。

为了使得逆元存在,我们不妨把 p 唯一分解,最后再用中国剩余定理合并答案即可。

考虑:

\binom{n}{m}=\frac{n!}{m!(n-m)!}=\frac{\frac{n!}{p^x}}{\frac{m!}{p^y}\frac{(n-m)!}{p^z}} \times p^{x-y-z}

现在的问题是快速计算:

\frac{n!}{p^x}\pmod {p^t}

考虑 n! ,我们有:

\begin{aligned} n!&\equiv\prod_{k=1}^n k \pmod {p^t}\\ &\equiv\prod_{p\mid k}^nk\times\prod_{p\nmid k}^n k \pmod {p^t}\\ &\equiv p^{\lfloor n\div p\rfloor}\times \left(\left\lfloor\frac{n}{p}\right\rfloor!\right)\times\left(\prod_{p\nmid k}^{p^t}k\right)^{\lfloor n\div p^t\rfloor} \times \left(\prod_{p\nmid k}^{n\bmod p^t} k\right) \pmod {p^t} \end{aligned}

而对于 \dfrac{n!}{p^x}p^{\lfloor n\div p\rfloor} 项是会被约掉的。但是 \left\lfloor\dfrac{n}{p}\right\rfloor! 项中仍可能包因子 p ,所以我们不妨定义函数 f(n)=\dfrac{n!}{p^x} ,则有:

f(n)\equiv f(\left\lfloor\dfrac{n}{p}\right\rfloor)\times\left(\prod_{p\nmid k}^{p^t}k\right)^{\lfloor n\div p^t\rfloor} \times \left(\prod_{p\nmid k}^{n\bmod p^t} k\right) \pmod {p^t}

这样我们便有:

\binom{n}{m}\equiv\frac{f(n)}{f(m)\times f(n-m)} \times p^{x-y-z} \pmod {p^t}

扩展欧拉定理

\text{Theorem 2.3}:a^b \equiv \begin{cases} a^b &(b<\varphi(m))\\ a^{b\bmod \varphi(m)+\varphi(m)} &(b\geq \varphi(m))\\ \end{cases} \pmod m

证明:当 b<\varphi(m) ,显然。

b\geq \varphi(m) ,我们考虑先把 m 唯一分解为 p_1^{k_1}\times p_2^{k_2}\times \dots \times p_3^{k_3} 的形式,然后我们对于每个 p_i^{k_i} 分别证明:

a^b \equiv a^{b \bmod \varphi(m)+\varphi(m)} \pmod {p_i^{k_i}}

即可使用以下引理合并答案:

\text{Lemma 2.2}: \text{If } \begin{cases} x \equiv y \pmod {m_1}\\ x \equiv y \pmod {m_2}\\ \end{cases} \text{ , then } x\equiv y \pmod {m_1m_2}

其中 m_1\bot m_2

考虑原式等价于

\begin{cases} x=y+k_1m_1\\ x=y+k_2m_2\\ \end{cases}

k_1m_1=k_2m_2 。因为 m_1\bot m_2 ,那么 m_2\mid k_1m_1\mid k_2 ,则我们有 x=y+k_3m_1m_2 ,即:

x=y \pmod{m_1m_2}

\gcd(a,p_i^{k_i})=1 ,那么由于欧拉函数具有积性, a^{\varphi(m)}=1\pmod {p_i^{k_i}} ,则上式成立。

否则 p\mid a ,我们有:

b\geq \varphi(m)\geq \varphi(p_i^{k_i})\geq k_i

因为若把 p_i^{k_i} 按照 p_i 分为 k_i 段,则每段大小至少为 2 ,且仅含一个数不与 p_i^{k_i} 互素,且欧拉函数具有积性。

那么 p_i^{k_i} \mid a^b ,我们有:

a^b \equiv a^{b \bmod \varphi(m)+\varphi(m)} \equiv 0 \pmod {p_i^{k_i}}

根据引理2.2,定理得证。

对于 a \bot m ,满足式 a^n\equiv 1 \pmod m 的最小正整数 n 存在,称其为 am 的阶,记作 \delta_m(a)

注意到 \delta_m(a)\mid \varphi(m) 。考虑若 \delta_m(a)\nmid \varphi(m) ,则有 \varphi(m)=k\delta_m(a)+r ,其中 r<\delta_m(a) ,那么:

\begin{aligned} a^{k\delta_m(a)+r} &\equiv 1 \pmod m\\ (a^{\delta_m(a)})^k\times a^r &\equiv 1 \pmod m\\ a^r &\equiv 1 \pmod m \end{aligned}

这与 \delta_m(a) 的定义矛盾,则这样的 r 不存在。

原根

对于 a \bot m ,若 \delta_m(a)=\varphi(m) ,则称 a 为模 m 的原根。

注意到 a 为模 m 的原根当且仅当 a^0,a^1,\dots a^{\varphi(m)-1} 两两不同。

考虑若存在 x\neq yx,y < \varphi(m) ,使得 a^x\equiv a^y ,那么显然的 a^{|x-y|}\equiv 1\pmod m ,其中 |x-y|<\varphi(m) ,与原根的定义矛盾。

且模 n 存在原根当且仅当 n=1,2,4,p^k,2p^k ,其中 p 为一个素数。

离散对数

g 为模 m 的原根,则 \forall a\bot m ,均存在 k 使得 g^k\equiv a\pmod m

因为目前没有见过围绕原根的题目,而且本人也不会阶、原根和离散对数的诸多性质与其证明,所以这里暂且略过这个部分。

二次剩余

即求解同余方程:

x^2\equiv n \pmod p

若解存在,则称 n 为二次剩余,否则称其为非二次剩余。

这里仅讨论 p 为奇素数的情况。

解的数量

不妨假设原方程存在多个解,即存在 x_0\neq x_1 ,使得 x_0^2\equiv x_1^2 \pmod p ,那么:

(x_0-x_1)\times (x_0+x_1)\equiv 0 \pmod p

显然 x_0+x_1\equiv 0 \pmod p ,即 x_0x_1 是一对在 \bmod p 意义下的相反数。那么对于二次剩余 n\neq 0 ,我们可以断言其必然有且仅有两个不同的合法解 x_0x_1

而在 \bmod p 的意义下,x_0x_1 的奇偶性必然是不同的,且 x_0x_1 是一一对应的,其同样唯一决定了一个二次剩余 n 。那么显然 \bmod p 意义下的一对相反数 x_0x_1 和二次剩余 n 是双射关系。

到这里我们可以断言 \bmod p 意义下非 0 二次剩余的数量恰为相反数的对数 \dfrac {p-1}2 ,而其它的非 0 数均为非二次剩余,数量也恰为 \dfrac {p-1}2

欧拉准则

\text{Theorem 2.4}:n\text{ 是}\bmod p \text{ 意义下的二次剩余,当且仅当 }n^{\frac {p-1}2}\equiv 1 \pmod p\text{ 。}

先证充分性:令 g\bmod p 意义下的原根,则 n=g^k\pmod p

n^{\frac {p-1}2}\equiv 1 \pmod p ,则 g^{k\times \frac {p-1}2}\equiv 1 \pmod p 。注意到 p-1\mid k\times \dfrac {p-1}2 ,则必然有 2 \mid k 。那么 g^{\frac k2} 即为二次剩余 n 的解,n\bmod p 意义下的二次剩余。

再证必要性:观察费马小定理,我们可以得到 n^{2\times \frac {p-1}2}\equiv 1\pmod p ,也就是说 n^{\frac {p-1}2} 是二次剩余 1 的解,则有以下引理:

\text{Lemma 2.3}:n^{\frac {p-1}2}\equiv \pm 1\pmod p

n 为二次剩余,则 n^{\frac {p-1}2}\equiv(x^2)^{\frac {p-1}2}\equiv x^{p-1}\equiv 1\pmod p

那么定理成立。

二次探测定理

\text{Theorem 2.5}:\text{If } x^2 \equiv 1 \pmod p\text{ , then }x\equiv \pm 1 \pmod p

其中 p 为一个素数。

证明:对原式做变换:

\begin{aligned} x^2 &\equiv 1 \pmod p\\ (x+1)(x-1) &\equiv 0 \pmod p\\ \end{aligned}

因为 p 为素数,则 p\mid x-1p\mid x+1 ,即 x=\pm 1 \pmod p

筛法

由于这一类实在太大所以单独列出来。

数论函数

定义域为正整数,值域是复数的子集的函数称为数论函数。

积性函数

对于数论函数 f ,若 \forall a\bot b ,有 f(a\times b)=f(a)\times f(b) ,则称 f 是积性函数。

\forall a,b \in \mathbb {N^*} ,有 f(a\times b)=f(a)\times f(b) ,则称 f 是完全积性函数。

对于积性函数 f ,我们通常研究其在素数和素数的幂上的取值。

一些函数

单位函数

\epsilon(n)=[n=1]

其中 \epsilon(n) 称单位函数,[\text{conditon}] 为艾弗森记号。

#### 除数函数 $$ \sigma_k(n)=\sum_{d\mid n}d^k $$ 其中 $\sigma_k(n)$ 称除数函数,即 $n$ 的因子的 $k$ 次方之和。 $\sigma_0(n)$ 常记作 $d(n)$ ,$\sigma_1(n)$ 常记作 $\sigma(n)$ 。 $\sigma_k(n)$ 是积性函数。 #### 幂函数 $$ {\rm Id}_k(n)=n^k $$ 其中 ${\rm Id}_k(n)$ 称幂函数,是积性函数。 ${\rm Id}_1$ 记作 ${\rm Id}$ 。 #### 欧拉函数 见上文。 #### 莫比乌斯函数 $$ \mu(n)= \begin{cases} 1 &(n=1)\\ (-1)^k & (n=p_1p_2\dots p_k)\\ 0& ({\rm otherwise}) \end{cases} $$ 其中 $\mu(n)$ 称欧拉函数,是积性函数。 $p_i$ 是素数。 $\mu$ 具有如下的最重要的性质: $$ \sum_{d\mid n}\mu(d)=\epsilon(n) $$ 当 $n=1$ 时显然。 而当 $n\neq 1$ 时,设 $n$ 的唯一分解具有 $k$ 个不同的素因子,否则 $\mu(n)=0$ ,那么: $$ \sum_{d\mid n} \mu(n)=\sum_{i=0}^k (-1)^k\binom ki=(1-1)^k=0 $$ 另有莫比乌斯反演定理,其指出: $$ g(n)=\sum_{d\mid n}f(d) $$ 成立,当且仅当: $$ f(n)=\sum_{d\mid n}\mu(\frac nd)g(d) $$ 称 $g$ 为 $f$ 的莫比乌斯变换, $f$ 为 $g$ 的莫比乌斯逆变换。 证明则非常简洁: $$ g=f*1\Leftrightarrow f=f*\epsilon=f*1*\mu=g*\mu $$ ### 线性筛 常见的用法是筛素数。 但实际上对于任意一个积性函数,若其在素数处的取值可以被快速计算,那么我们就可以在线性的时间复杂度内筛出其某个前缀范围内的值。因为在线性筛的过程中我们可以求出每个数的最小素因子及其幂次。 ### 埃氏筛 即枚举每个素数,并筛掉它们的倍数,时间复杂度是 $O(n\log \log n)$ 的。 ### 整除分块 筛法的基石之一。 对于形如: $$ \sum_{i=1}^n\left\lfloor\frac ni\right\rfloor $$ 的式子,我们可以通过同时考虑 $\left\lfloor\dfrac ni\right\rfloor$ 相等的 $i$ 而在 $O(\sqrt n)$ 的时间复杂度内计算。 实际上其基于这样的事实:一个数的因数个数是 $O(\sqrt n)$ 级别的,因此我们最多也只会分出 $O(\sqrt n)$ 个不同的块来。 ### 迪利克雷卷积 $$ h(n)=\sum_{d\mid n} f(d)\times g(\frac nd) $$ 称 $h$ 为 $f$ 和 $g$ 的迪利克雷卷积,记作 $h=f*g$ 。 其实其等价于乘法卷积。 迪利克雷卷积具有单位元,是 $\epsilon$ ,即 $f*\epsilon=f$ 。其同样具有交换律和结合律。 另外若 $f$ ,$g$ 都为积性函数,则 $f*g$ 同为积性函数。 ### 杜教筛 实际上是利用迪利克雷卷积来构造递推式,从而对一些积性函数快速求和的方法。 我们现在考虑求取积性函数 $f$ 的前缀和 $F$ 。设存在函数 $g$ ,使得 $f*g$ 的前缀和可以被快速计算,那么: $$ \begin{aligned} \sum_{k=1}^n(f*g)(k) &=\sum_{k=1}^n\sum_{d\mid k}f(\frac kd)\times g(d)\\ &=\sum_{d=1}^n\sum_{k=1}^{\lfloor n\div d \rfloor} f(k) \times g(d)\\ &=\sum_{d=1}^ng(d)\times F(\left\lfloor\frac nd\right\rfloor)\\ &=\sum_{d=2}^ng(d)\times F(\left\lfloor\frac nd\right\rfloor)+g(1)\times F(n)\\ \end{aligned} $$ 则: $$ F(n)=\left(\sum_{k=1}^n(f*g)(k)-\sum_{d=2}^ng(d)\times F(\left\lfloor\frac nd\right\rfloor)\right)\div g(1) $$ 若 $f*g$ 的前缀和可以被快速计算,我们就可以使用整除分块,从而把 $F(n)$ 划分为若干个子问题。 注意到实际上我们只会计算 $n$ 的所有因子处的 $F$ 的值,那么我们可以估计杜教筛的时间复杂度 $T(n)$ : $$ T(n)=\sum_{k=1}^{\sqrt{n}} O(\sqrt{k})+\sum_{k=1}^{\sqrt{n}}O\left(\sqrt{\left\lfloor\frac nk\right\rfloor}\right) $$ 对于渐进意义较大的第二项,我们使用积分估计: $$ \sum_{k=1}^{\sqrt{n}}O\left(\sqrt{\left\lfloor\frac nk\right\rfloor}\right)=O\left(\int_1^{\sqrt{n}}\sqrt{\frac nx}\ {\rm d}x\right)=O(n^{\frac 34}) $$ 实际上我们可以使用线性筛来预处理 $F$ 的前 $n^{\frac 23}$ 项,这样杜教筛的时间复杂度降至 $O(n^{\frac 23})$ 。 ### Min-25 筛 Min-25 筛本质上是对埃氏筛进行了扩展,用于求解积性函数的前缀和,要求其在质数与质数的次幂处的取值可以被快速计算。 下面对 Min-25 筛的运行过程做一个简要的推导: 记 $\mathbb P$ 中的数为 $p$ ,$p_k$ 为 $\mathbb P$ 中第 $k$ 小的数,${\rm lpf}(n)$( $\rm lowest\ prime\ factor$ )为 $n$ 的最小素因子,$F(n)=\sum_{p\le n}f(p)$ ,$F_k(n)=\sum_{i=2}^n[p_k\le{\rm lpf}(i)]f(i)$ ,不难发现答案即为 $F_1(n)+1$ 。 考虑在 $F_k$ 与 $F$ 之间建立递推关系,从素因子的角度出发,并应用积性函数的性质,我们有: $$ \begin{aligned} F_k(n)&=\sum_{i=1}^n[{\rm lpf}(i)\ge k]f(i) \\ &=\sum_{i\ge k,p_i^2\le n}\sum_{c\ge 1,p_i^c\le n} f(p_i^c)\times([c>1]+F_{k+1}(n/p_i^c))+F(n)-F(p_{k-1})\\ \end{aligned} $$ 现在的问题在于如何快速求取 $F$ 。首先可以注意到只有 $O(\sqrt n)$ 处的 $F_k$ 和 $F$ 的取值对我们来说是有用的,这一点保障了我们的计算复杂度。现在我们只关注 $f$ 在质数处的取值,在具体的问题中,这一部分往往可以被表示为一个低次多项式,因此我们可以考虑分别计算每一项的贡献,最后再把它们加起来。也就是说现在我们只需要求 $g(n)=n^s$ 在只考虑素数处的取值的情况下的前缀和。注意到 $g$ 具有非常优美的性质,其是一个完全积性函数,因此我们考虑构造 $G_k(n)=\sum_{i=2}^n[{\rm lpf}(i)>p_k \or i \in {\mathbb P}]g(i)$ ,即埃氏筛第 $k$ 轮以后剩下的数处的 $g$ 的取值之和。从埃氏筛的过程入手,我们考虑如何递推求解 $G_k(n)$ ,即: 1. 对于 $p_k^2>n$ ,显然,所有满足的条件的数都会是素数,因此 $G_k(n)=G_{k-1}(n)$ 。 2. 否则我们希望去除掉所有 ${\rm lpf}$ 为 $p_k$ 的合数处的取值,即减去 $g(p_k)G_{k-1}(n/p_k)$ 。 3. 在第 $2$ 步中会多减一部分,这部分均仅含一个小于 $p_k$ 的素因子,因此我们加上 $g(p_k)G_{k-1}(p_{k-1})$ 。 概括一下,我们有: $$ G_k(n)=G_{k-1}(n)-[p_k^2\le n]g(p_k)(G_{k-1}(n/p_k)-G_{k-1}(p_{k-1})) $$ 为了分析 Min-25 筛的时间复杂度,我们将其分为两部分看待。第一部分,即通过构造完全积性函数来获取 $F$ ,的时间复杂度是 $O(\dfrac {n^{3/4}}{\log n})$ ;而第 $2$ 部分,即通过 $F$ 来递推获取 $F_k$ ,存在两种实现方法。若直接按照递推式来暴力计算,时间复杂度为 $O(n^{1-\epsilon})$ ;或者我们可以选择从大到小枚举 $p$ 来转移,并使用后缀和优化,时间复杂度为 $O(\dfrac {n^{3/4}}{\log n})$ 。一般认为第一种更易于实现,且在数据规模较小时的表现往往要优于后者,因此 Min-25 筛的时间复杂度可以认为是 $O(\dfrac {n^{3/4}}{\log n}+n^{1-\epsilon})$ 。 ## 算法 ### 扩展欧几里得算法 用于求解线性方程组: $$ ax+by=\gcd(a,b) $$ 考虑朴素欧几里得算法的过程,最后一步必然 $a=g$ 且 $b=1$ ,那么此时 $x=1$ 且 $y=0$ 是合法的。 那么到上一步,我们获得了方程 $bx+(a\bmod b)y=g$ 的解。考虑做一下变换: $$ \begin{aligned} bx+(a\bmod b)\times y&=g\\ bx+(a-b\times \left\lfloor\frac ab\right\rfloor)\times y&=g\\ ay+b(x-\left\lfloor\frac ab\right\rfloor y)&=g\\ \end{aligned} $$ 那么我们就可以递归的求解这个方程了。 #### 一般线性方程组及其解的结构 即求解线性方程组: $$ ax+by=c $$ 显然其存在解当且仅当 $\gcd(a,b) \mid c$ ,这也就是斐蜀定理。 那么我们解方程: $$ ax'+by'=\gcd(a,b) $$ 再在上式左右同乘 $\dfrac c{\gcd(a,b)}$ 即可。 但这样得出的解并不一定是最小非负整数解。我们知道: $$ \begin{aligned} ax+by+kd-kd&=c\\ a\times (x+k\times \frac da)+b\times (y+k\times \frac db) &=c\\ \end{aligned} $$ 当方程的解为整数,显然 ${\rm lcm}(a,b)\mid d$ 。而我们期望找到一个最小的满足条件的 $d$ ,也就是说 $d={\rm lcm}(a,b)$ 。那么方程的通解就是 $x+k\times \dfrac b{\gcd(a,b)}$ 和 $y-k\times \dfrac a{\gcd(a,b)}$ 。 ### 大步小步算法 用于求解同余方程: $$ a^b\equiv x \pmod p $$ 其中$a$ , $x$ 已知, $p$ 是一个素数。 由费马小定理我们有 $a^0=a^{p-1}$ ,也就是说若解存在,则其必然小于 $p-1$ 。 我们考虑将 $b$ 表示为 $kq+r$ 的形式,其中 $r<q$ 。那么我们可以通过预处理用哈希表来保存 $a^r$ ,并枚举 $k$ ,同时查表来遍历所有小于 $p-1$ 的指数,以获取合法的最小解。时间复杂度 $O(\dfrac pq+q)$ ,当 $q=\sqrt{p}$ 时,其达到最小值 $O(\sqrt{p})$ 。 ### 扩展大步小步算法 用于求解同余方程: $$ a^b\equiv x \pmod p $$ 其中$a$ , $x$ 和 $p$ 已知。 观察到在以前的步骤中,我们要求 $a$ 在 $\bmod p$ 意义下存在逆元。我们设 $g=gcd(a,p)$ ,那么: $$ \begin{aligned} a^{b-1}\times \frac ag &\equiv \frac xg \pmod {\frac pg}\\ a^{b-1} &\equiv \frac xg\times \left(\frac ag\right)^{-1} \pmod {\frac pg}\\ \end{aligned} $$ 这和我们的目标是相同的形式。所以我们考虑递归的求解这个问题,直到 $a\bot p$ 。此时我们可以套用大步小步算法。 ### Cipolla 算法 用于求解同余方程: $$ x^2\equiv n \pmod p $$ 其中 $p$ 是一个奇素数。 我们考虑找到一个数 $a$ 满足 $a^2-n$ 是非二次剩余。由于非二次剩余的数量为 $\dfrac {p-1}2$ ,通过随机的方式我们可以快速找到这样一个 $a$ 。 接下来我们定义 $i^2=a^2-n$ ,然而 $a^2-n$ 并不是二次剩余,也就是说在目前的数域上我们找不到这样一个 $i$ 。 类比实数域到负数域的推广,我们不妨考虑将 $\bmod p$ 意义下的所有数表示为 $a+bi$ 的形式,这样我们就得到了一个对复数的离散模拟。 那么有结论: $$ \text{Theorem 3.1}:(a+i)^{p+1}\equiv n \pmod p $$ 我们先考虑这样一个引理: $$ \text{Lemma 3.1}:i^p\equiv -i \pmod p $$ 证明:按定义:$i^p \equiv i\times (i^2)^{\frac {p-1}2}\equiv i\times (a^2-n)^{\frac {p-1}2}$ 。 那么根据引理2.3,有 $i^p\equiv -i \pmod p$ ,引理得证。 再考虑引理2.1,我们有: $$ \begin{aligned} (a+i)^{p+1} &\equiv (a^p+i^p)\times (a+i) \pmod p\\ &\equiv (a-i)\times (a+i) \pmod p\\ &\equiv a^2-i^2 \pmod p\\ &\equiv n \pmod p\\ \end{aligned} $$ 至此定理得证。 那么我们知道 $(a+i)^{\frac {p+1}2}$ 即是二次剩余 $n$ 的一个解,其相反数为另一个解。 然而我们仍然无法确定数 $(a+i)^{\frac {p+1}2}$ 是否存在虚部。 不妨假设存在数 $a+bi$ 使得 $(a+bi)^2\equiv n \pmod p$ ,其中 $b\neq 0$ 。那么有: $$ \begin{aligned} a^2+b^2i^2+2abi &\equiv n \pmod p\\ a^2+b^2(a^2-n)+n& \equiv -2abi \pmod p\\ \end{aligned} $$ 注意到左式不存在虚部,那么有 $ab\equiv 0 \pmod p$ ,即 $a\equiv 0\pmod p$ 。则 $b^2i^2\equiv n\pmod p$ ,$i^2\equiv n\times b^{-2}\pmod p$ 。 而 $n$ 和 $b^{-2}$ 均为二次剩余,也就是说 $n\times b^{-2}$ 和 $i^2$ 都是二次剩余,这与 $i$ 的定义冲突。则数 $a+bi$ 必然不存在虚部。 ### Miller-Rabin 素性测试算法 基于二次探测定理和费马小定理的素性测试算法。 目标是测试数 $p$ 是否为素数。 我们先把 $p-1$ 分解为 $2^k\times t$ 的形式,然后随机一个底数 $a$ 计算 $a^t$ 。然后我们不断对其乘方,并使用二次探测定理判断,若其到达 $a^{p-1}$ 的上界,使用费马小定理判断。 若 $p$ 通过一轮测试,则 $p$ 为合数的概率为 $\dfrac 14$ ,那么经过 $k$ 轮测试,概率为 $\dfrac 1{4^k}$ 。 若广义黎曼猜想成立,那么可以通过选取少量底数使得 Miller-Rabin 素性测试算法成为确定性算法。 对于 $p<2^{32}$ ,选取 $2,7,61$ 共 $3$ 个底数可以确定 $p$ 是否为素数。 而对于 $p < 2^{64}$ ,选取 $2,325,9375,28178,450775,9780504,1795265022$ 共 $7$ 个底数就可以做到这一点。 ### Pollard-Rho 大数分解算法 基于 Miller-Rabin 素性测试算法的随机算法。 我们的目标是对数 $n$ 质因数分解。 考虑若存在 $k$ ,使得 $\gcd(n,k)\neq 1$ ,那么我们就找到了一个 $n$ 的因子。 考虑随机的寻找这个 $k$ 。为了使得找到 $k$ 的概率更大,我们引入生日悖论。具体的,我们随机出一个数列 $\{a_m\}$ 使用其中两数作差结果作为 $k$ 来计算最大公约数。 需要注意的是我们所使用的伪随机数生成方式非常特殊。若当前我们获取了数列 $\{a_m\}$ 的前 $i-1$ 项,那么我们通过把 $a_{i-1}$ 带入式 $f(x)=x^2+t \pmod n$ 来获取 $a_i$ 项,其中 $t$ 是一个随机数。显然其在模意义下是具有循环节的,我们需要在遍历循环节后退出这个过程,这样需要一个判圈算法,可以使用 Floyd 判圈算法,不过这里使用倍增算法实现。 若一轮分解失败,我们更换 $t$ 进行下一轮分解。 另外我们求取最大公约数的过程是可以优化的。注意到在 Pollard-Rho 算法的运行过程中求取最大公约数的次数非常的多,且我们并不需要精确的获取每一项最大公约数,那么可以考虑乘法累积最大公约数再一次计算,在倍增算法的过程中非常自然。 根据定理1.1,我们可以在 $\bmod n$ 的意义下计算,其不会影响最大公约数。 那么每当完成一次分解,我们重复这个过程,并不断使用 Miller-Rabin 素性测试算法来判断我们是否获取了一个素因子即可。 可以发现算法的关键其实是这个伪随机数生成方式,可惜我仍没有理解为什么这个数列如此有效。