基础数论学习笔记

初等数论学习笔记

0.0 相关定义

  • \(a \mid b\) 表示 \(a\)\(b\) 的因数,即 \(a\) 整除 \(b\),类似的,记 \(a \nmid b\)\(a\) 不整除 \(b\)
  • \(a \perp b\) 表示 \(a\)\(b\) 互质。\(1\) 和任何数都互质,任何数和它自己都不互质,特别地,\(1\)\(1\) 互质。
  • 若模 \(p\) 意义下有 \(ax \equiv 1 \pmod p\),则 \(x\)\(a\)\(p\) 意义下的乘法逆元。记 \(a\) 的乘法逆元为 \(a^{-1}\)
  • \(\mathbb{P}\) 为质数集。
  • 没有冲突的情况下,记 \((i,j)\) 表示 \(\gcd(i,j)\)
  • 对于若干整数 \(a_1,a_2,...,a_{p-1}\),若满足 \(\forall x,\exists a_i \equiv x \pmod p\),则称这 \(p-1\) 个整数为模 \(p\) 的完全剩余系。
  • 对于若干整数 \(a_1,a_2,...,a_{\varphi(p)}\),若满足 \(\forall i,a_i \perp p\)\(a_i\) 在模 \(p\) 意义下互不相同,则称这 \(\varphi(p)\) 个整数为模 \(p\) 的简化剩余系。
  • \(v_k(p)\) 表示 \(p\) 之中质因子 \(k\) 的个数。

1. 质数

1.1 性质

  • 质数的分布比较稀疏,当 \(N\) 足够大时,\(N\) 以内的质数约有 \(\dfrac{N}{\ln N}\) 个。

1.2 线性筛质数

考虑对于每个数把它的倍数都打上标记,对于一个数,只需保证其只会被其最小的质因子打标记即可。

2. 费马小定理

2.1 形式

若满足 \(p \in \mathbb{P},p \nmid a\),则:

\[a^{p-1} \equiv 1 \pmod p \]

2.2 证明

引理 1

对于模 \(p\) 的完全剩余系 \(K\),若 \(p \nmid a\),那么模 \(p\) 意义下这些数乘 \(a\) 后互不相同。

考虑如果这样的单射关系成立,那么其等价于不存在 \(x<y,x \in K,y \in K\) 满足 \(ax \equiv ay \pmod p\)

将上面的式子移项,得到 \(a(y-x) \equiv 0 \pmod p\),由于 \(p \nmid a\)\(p \in \mathbb{P}\),那么只有 \(p \mid (y-x)\),即 \(x \equiv y \pmod p\) 时式子成立。但根据完全剩余系的定义这显然不成立,由此得证。

考虑若引理成立,而余数为 \(0\) 的一项显然是独立的,那么有:

\[\prod_{i=1}^{p-1}ai \equiv \prod_{i=1}^{p-1} i \pmod p \]

消去相同部分即可得到费马小定理:

\[a^{p-1} \equiv 1 \pmod p \]

3. 欧拉函数

3.1 定义

欧拉函数,即 \(\varphi(n)\),表示 \([1,n]\) 内与 \(n\) 互质的数的个数。

3.2 性质

性质一:若 \(n \in \mathbb{P}\),则 \(\varphi(n)=n-1\)

性质二:若 \(n \in \mathbb{P}\),则 \(\varphi(n^k) = (n-1)n^{k-1} = \frac{n-1}{n} \times n^k\)

证明:显然此时只有 \(n\) 的倍数不与 \(n^k\) 互质。

性质三:欧拉函数是积性函数。即若 \(a \perp b\),则 \(\varphi(ab)=\varphi(a) \times \varphi(b)\)

证明:令 \([1,a]\) 以内与 \(a\) 互质的数为 \(a_1,a_2,...,a_{\varphi(a)}\)。考虑 \([1,ab]\) 之内所有与 \(a\) 互质的数就一定都是形如 \(ia + a_j(i \in [0,b-1],j \in [1,\varphi(a)])\) 的形式。对于每一个 \(j\) 单独考虑,由于 \(a \perp b\),所有根据引理 \(1\),所有的 \(ia\) 共同构成了模 \(b\) 的完全剩余系,那么自然所有的 \(ia + a_j\) 同样构成了模 \(b\) 的完全剩余系。

引理 2

\(a \perp b\),则 \(kb+a \perp b\)

证明:设两侧最大公因数为 \(G\)。显然有 \(G=1\)。命题成立。

根据引理 \(2\),对于一个 \(a_j\),所有的 \(ia + a_j\) 中模 \(b\) 的余数有多少个和 \(b\) 互质,就有多少个数与 \(b\) 互质。这个数量根据定义能看出就是 \(\varphi(b)\)。即对于每个 \(a_j\) 都有 \(\varphi(b)\) 个数与 \(ab\) 互质,则共有 \(\varphi(a) \varphi(b)\) 个数。得证。

性质四: 若 \(n\) 能唯一分解为 \(\prod_{i=1}^m p_i^{c_i}\),则 \(\varphi(n) = n \prod_{i=1}^m (1 - \frac{1}{p_i})\)

证明:这个可以用容斥原理理解,也可以采用以下方式:

根据欧拉函数的积性与性质二可知,

\(\varphi(n) = \prod_{i=1}^m \varphi(p_i^{c_i}) = \prod_{i=1}^m p_i^{c_i} (1 - \frac{1}{p_i}) = n \prod_{i=1}^m (1 - \frac{1}{p_i})\)

性质五:若 \(p \in \mathbb{P}\)\(p \mid n\)

\[\varphi(n)=\begin{cases} p \times \varphi( \frac{n}{p} ) & p^2 \mid n \\ (p-1) \times \varphi( \frac{n}{p} ) & p^2 \nmid n \end{cases} \]

证明:根据性质四写出式子即可。

运用此性质可以用线性筛求出欧拉函数。

性质六:所有 \([1,n]\) 中与 \(n\) 互质的数能一一配对,即 \(2 \mid \varphi(n) (n>2)\)

证明:由于若 \(x \perp n\)\(n-x\) 也一定与 \(n\) 互质。特别的是 \(x=n-x\),此时 \(x = \frac{n}{2}\),显然不可能与 \(n\) 互质。

性质七(欧拉反演): \(\sum\limits_{d \mid n} \varphi(d) = n\)

证明:设 \(f(i)\) 表示与 \([1,n]\)\(\gcd(k,n)=i\)\(k\) 的个数,显然有 \(\sum\limits_{i=1}^n f(i) = n\)。根据 \(\gcd\) 定义易知 \(\gcd(k,n)=i\) 等价于 \(\gcd(k,\lfloor \frac{n}{i} \rfloor) =1\)。转为枚举 \(d = \lfloor \frac{n}{i} \rfloor)\),即可将式子变成 \(\sum\limits_{d \mid n} \varphi(d) = n\)

3.3 欧拉定理

\(a \perp m\),则

\[a^{\varphi(m)} \equiv 1 \pmod m \]

证明:

引理 3

对于模 \(p\) 的简化剩余系 \(K\),若 \(p \nmid a\),那么模 \(p\) 意义下这些数乘 \(a\) 后互不相同。

证明同引理 \(1\)。容易证明 \(aa_i\) 互不相同,且由于 \(a \perp p\)\(a_i \perp p\),所以 \(aa_i \perp p\),仍位于简化剩余系之中。

那么和费马小定理一样有

\[\prod_{i=1}^{\varphi(p)}ai \equiv \prod_{i=1}^{\varphi(p)} i \pmod p \]

\[a^{\varphi(m)} \equiv 1 \pmod m \]

容易看出其实费马小定理即为欧拉定理的特殊形式。

3.4 扩展欧拉定理

\[a^b \equiv \begin{cases} a^{b \bmod \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} \]

3.5 例题

P4139 上帝与集合的正确用法

考虑使用扩展欧拉定理来化简这个幂塔。那么一定在若干层的嵌套之后,模数 \(p\) 经过若干次欧拉函数的嵌套值变为 \(1\)。而这个层数一定是 \(\log\) 级别的。证明根据定义,若 \(2 \mid n\),一定有 \(\varphi(n) \leq \frac{n}{2}\)。而性质六证明了对于 \(n>2\) 均有 \(2 \mid \varphi(n)\)。所以至多递归 \(\log\) 层。

P3747 [六省联考 2017] 相逢是问候

考虑朴素的想法:用扩展欧拉定理处理幂塔,显然一个位置最多被修改 \(\log\) 次之后就会使得 \(\varphi(p)=1\),尝试用线段树维护区间信息,所以可以每次都暴力修改到每个 \([x,x]\) 区间,暴力的重新计算幂塔的值,只需记录每个区间的每个位置的修改次数的最小值,这样至多有叶子的修改 \(n\log p\) 次,在线段树上走到叶子的复杂度可以均摊忽略不计,每次会有线段树的一个 \(\log\) 和快速幂的 \(\log\),但是用光速幂就可以使得它变为 \(O(n\log^2p)\) 的复杂度。

特别地,我们需要多在预处理的欧拉函数中加一个 \(1\),这是因为 \(a_i=0\) 时会消去一层,需要多进行一层遍历才会进入循环节。

4. 乘法逆元

4.1 对数求逆元

4.1.1 费马小定理

变形可知:

\[a \times a^{p-2} \equiv 1 \pmod p \]

所以当 \(p \in \mathbb{P},p \nmid a\) 时,\(a^{p-2}\) 即为 \(a\) 的乘法逆元。

4.1.2 欧拉定理

\(a \perp p\)\(a^{-1} = a^{\varphi(p)-1} \pmod p\)

优点在于避开了费马小定理模数必须为质数的性质。

4.1.3 Exgcd

直接求解方程 \(ax \equiv 1 \pmod p\) 即可。

4.2 线性求逆元

首先特别定义 \(1^{-1}=1\)

假设我们已经知道了 \(1 \sim a-1\) 的乘法逆元,尝试递推 \(a\) 的乘法逆元。

不妨设 \(k = \lfloor \frac{p}{a} \rfloor,j = p \bmod a\)。则有 \(ka + j \equiv 0 \pmod p\)

两面同时乘 \(a^{-1}j^{-1}\)\(kj^{-1} + a^-1 = 0\),也就是

\(a^{-1} = -kj^{-1}\)

\(a^{-1} = (p- \lfloor \frac{p}{a} \rfloor ) \times ( p \bmod a)^{-1}\)

但是我们还有另一种方法:

若想求 \(inv_i = (i!)^{-1}\),可以先用快速幂用费马小定理算出 \(n!\) 的乘法逆元,然后可以倒着递推:

\(inv_i = inv_{i+1} \times (i+1)\)

这样求出阶乘的逆元后也可以通过乘上前缀积来得到 \(1 \sim n\) 的逆元。这个方法也可以用于线性求正整数数组 \(a_1,a_2,...,a_n\) 每个数的逆元。使用时需要注意费马小定理的限制条件。

5. 扩展欧几里得算法

5.1 裴蜀定理

二元一次不定方程 \(ax+by=c\) 有解的充要条件是

\[\gcd(a,b) \mid c \]

\(d=\gcd(a,b)\)

考虑若方程有解,那么一定有 \(d \mid c\),充分性得证。接下来考虑证明必要性。

\(\gcd(a,b) \mid c\),这启发我们化简方程,将两边同时乘以 \(\frac{1}{d}\),得到新方程 \(\frac{a}{d}x + \frac{b}{d}y = \frac{c}{d}\)。下文用 \(ax+by=c\) 代表新方程,显然此时有 \(a \perp b\)。此时若 \(ax \bmod b\) 取遍 \(0 \sim b-1\),则 \(ax+by\) 取遍所有整数,方程一定有解。而这个问题与引理一是等价的。由此必要性得证。

证毕。

裴蜀定理同样证明了 \(a\) 在模 \(p\) 意义下存在逆元的条件是 \(a \perp p\)。这是因为 \(ax \equiv 1 \pmod p\) 等价于 \(ax + py = 1\),若 \(\gcd(a,p) \neq 1\),显然无解。

5.2 算法流程

以下流程均基于方程有解。

显然,我们可以求出 \(ax+by=d\) 的解,再将解乘上 \(\frac{c}{d}\)。显然根据裴蜀定理,解一定存在。

回想辗转相除法的算法过程,有关键结论 \(\gcd(a,b) = \gcd(b,a \bmod b)\)。这启示我们可以进行辗转相除式的递归构造。

假设已经求出了方程 \(bx' + (a \bmod b)y' = d\) 的一组解 \(x',y'\),那么

\[\begin{aligned} ax+by &= bx' + (a \bmod b)y' \\ &= bx' + (a - b \lfloor \frac{a}{b} \rfloor)y' \\ &= bx' + ay' - b \lfloor \frac{a}{b} \rfloor y' \\ &= ay' - b(x' - \lfloor \frac{a}{b} \rfloor y') \end{aligned} \]

所以有 \(x = y',y=x' - \lfloor \frac{a}{b} \rfloor y'\)

显然迭代的边界为 \(b=0,a=d\) 时,此时直接钦定 \(x=1,y=0\) 即可。

可以证明,特解的范围为 \(|x| \leq |b|,|y| \leq |a|\)

5.3 通解

显然此时求出的为一组特解,但是大多数情况都对解有值域限制,于是考虑构造通解的形式。

我们设求出的特解为 \(x,y\),通解 \(x' = x +\Delta x,y' = y + \Delta y\)。显然有 \(a\Delta x + b\Delta y = 0\)。进一步设 \(\Delta = |a\Delta x| = |b \Delta y|\),则显然有 \(\text{lcm}(a,b) \mid Delta\)

那么由此可知,\(\frac{\text{lcm}(a,b)}{a} \mid \Delta x\)\(\frac{\text{lcm}(a,b)}{b} | \Delta y\),所以通解形式即为:

\[\begin{cases} x' = x + \frac{b}{d} k \\ y' = y - \frac{a}{d} k \end{cases} \]

6. 线性同余方程组

求解:

\[\begin{cases} x \equiv a_1 \pmod {m_1} \\ x \equiv a_2 \pmod {m_2} \\ ... \\ x \equiv a_n \pmod {m_n} \end{cases} \]

6.1 中国剩余定理

中国剩余定理适用于 \(m\) 两两互质的情况。

我们可以尝试对于每个方程构造一个 \(x_i\),使得该方程成立,且在其他方程中 \(x_i\) 在其模数意义下为 \(0\),则 \(x = \sum\limits_{i=1}^n x_i\)

\(M=\prod_{i=1}^n m_i\),对于第 \(i\) 个方程,首先 \(x=a_i\) 即可使得方程成立。设 \(c_i = \frac{M}{m_i}\),那么 \(x_i\) 一定为 \(c_i\) 倍数,直接乘上 \(c_i\) 即可满足。若要使方程成立,就再乘上 \(c_i\)\(m_i\) 意义下的乘法逆元 \(d_i\),因为 \(m\) 两两互质,根据裴蜀定理, \(d_i\) 一定存在,只不过不能使用费马小定理来求。注意,乘法不能对 \(m_i\) 取模。

那么就可以有 \(x = \sum\limits_{i=1}^n a_i c_i d_i\)

6.2 扩展中国剩余定理

扩展中国剩余定理可以处理 \(m\) 不两两互质的情况。

我们考虑如何合并两个同余方程。不难发现,两个方程 \(x \equiv a_1 \pmod {m_1},x \equiv a_2 \pmod {m_2}\) 合并只会有两种情况:

  1. 无法合并
  2. 合并为一个形如 \(x \equiv k \pmod {\text{lcm}(m_1,m_2)}\) 的方程。

那么,具体如何合并呢?

首先可以将两个方程都转化为不定方程形式,即 \(x = pm_1 + a_1 = qm_2 + a_2\)。移项可以得到 \(pm_1- qm_2 = a_2 - a_1\),若方程无解,则说明原方程组无解。否则使用扩展欧几里得算法求出 \(p,q\) 之后可以得到 \(x = pm_1 +a_1\) 的值,对 \(\text{lcm}(m_1,m_2)\) 取模就可以得到合并后方程 \(k\) 的值。

以此类推,我们可以不断合并直到只剩下一个方程,此时的 \(k\) 即为答案。

7. 威尔逊定理

7.1 一般形式

由于乘法逆元成对出现,那么对于 \(p \in \mathbb{P}\),此时 \(1 \sim p-1\) 均存在逆元,自然想到探究是否能两两配对,可以得到一个初步的猜想:若 \(p \in \mathbb{P}\),则 \((p-1)! \equiv 1 \pmod p\)

证明:

首先对于 \(p=2\),定理显然成立。

否则,\(p\) 为奇素数,那么只需要证明不存在 \(a,b \in [1,p-1]\) 满足 \(a^{-1} = b^{-1}\)。不难发现这个和引理一的证明有异曲同工之妙。若 \(a^{-1} = b^{-1} =k\),则 \(ak \equiv bk \pmod p\),也就是 \((a-b)k \equiv 0 \pmod p\)。显然这不可能成立。由此可知逆元一定能两两配对。

但这是不完备的。若存在 \(a = a^{-1}\) 的情况,可能会使得结论不成立。接下来讨论这种情况。

\(a = a^{-1}\),则 \(a^2 \equiv 1 \pmod p\),移项可得 \((a+1)(a-1) \equiv 1 \pmod p\),也就是只有 \(a=\pm 1\) 时有 \(a = a^{-1}\)。即对于 \(a \in [2,p-2]\)\(a^{-1}\) 可以实现两两配对。那么可得真正的威尔逊定理的形式:

\[(p-1)! \equiv -1 \pmod p \]

但是仍可以证明 \(p \in \mathbb{P}\) 的必要性。分几种情况讨论:

  • \(p=4\),此时 \(p-1 \equiv 3 \pmod p\)
  • \(p\) 为大于 \(4\) 的完全平方数 \(q^2\),那么 \((p-1)!\) 一定包含了 \(q\)\(2q\),两者相乘得 \(2p\),自然有 \((p-1)! \equiv 0\)
  • \(p\) 为大于 \(4\) 的非完全平方数,设其最小质因子为 \(q\),那么 \((p-1)!\) 一定包含了 \(q\)\(\dfrac{p}{q}\),且一定有 \(q \neq \dfrac{p}{q}\),自然也有 \((p-1)! \equiv 0\)

由此可知,当且仅当 \(p \in \mathbb{P}\) 时,有 \((p-1)! \equiv -1\)

7.2 威尔逊定理的扩展

\((p^k!)_p = \prod\limits_{i=1,(i,p)=1}^{p^k} i\),即 \([1,p^k]\) 以内所有与 \(p\) 互质的数的乘积。

那么有推论:

\[(p^k!)_p \equiv \begin{cases} 1 & p=2,k \geq 3 \\ -1 & \text{otherwise.} \end{cases} \pmod {p^k} \]

由于 \(p^k\) 与这些数都互质,仍满足朴素威尔逊定理的证明中两个数的逆元不相同的性质,那么延续逆元配对的思路,继续分类讨论证明:

\(p>2\),此时观察方程 \((p+1)(p-1) \equiv 0 \pmod p\) ,由于 \(p+1\)\(p-1\) 不可能均为 \(p\) 的倍数从而凑出一个 \(p^k\),那么方程有解只能是 \(p+1 \equiv 0\)\(p-1 \equiv 0\)。与一般情况相同,所以 \((p^k!)_p \equiv -1 \pmod {p^k}\)

\(p=2\),分析 \((x+1)(x-1) \equiv 0 \pmod {2^k}\) 的根的情况。

除了常规的根 \(x=\pm 1\) 以外,又可能 \(p+1\)\(p-1\) 同时为 \(2\) 的倍数,考虑两个数的因子 \(2\) 个数之和要大于等于 \(k\),而两个数的因子 \(2\) 数量不可能都大于 \(1\),所以只能有一个数的因子个数为 \(k-1\),也就是说,我们还会有解 \(x =2^{k-1} \pm 1\)

考虑重根的情况,分类讨论:

  • \(k=1\),四个根都重合,\((p^k!)_p \equiv -1 \pmod {p^k}\)
  • \(k=2\),两对根重合,\((p^k!)_p \equiv -1 \pmod {p^k}\)
  • \(k \geq 3\),此时不可能再有根重合,\((p^k!)_p = 1 \times (-1) \times (2^{k-1}-1) \times (2^{k-1}+1) \equiv 1 \pmod {p^k}\)

得证。

8. Lucas 定理

\(p \in \mathbb{P}\),则

\[\binom{n}{m} \pmod p = \binom{\lfloor \frac{n}{p} \rfloor}{\lfloor \frac{m}{p} \rfloor} \binom{n \bmod p}{m \bmod p} \pmod p \]

\(n,m\) 的规模较大而 \(p\) 较小时,可以使用 Lucas,只需对前一个括号递归求解即可。复杂度为线性对数。

8.1 Lucas 定理的证明

不妨设 \(n = k_1p + b_1\)\(m = k_2p +b_2\)

而求 \(\dbinom{n}{m}\) 等价于求 \((1+x)^n\) 展开后 \(x^m\) 一项的系数。

引理四

\(p \in \mathbb{P}\),则 \((a+b)^p \equiv a^p +b^p\)

证明:考虑二项式定理展开。对于 \(i \in [1,p-1]\) 时,参数为 \(\dbinom{p}{i}\),若 \(p \in \mathbb{P}\),那么其就一定为 \(p\) 的倍数,模 \(p\) 意义下自然得 \(0\),可以消掉。

考虑对 \((1+x)^n\) 根据引理进行转化,有:

\[\begin{aligned} (1+x)^n & \equiv (1+x)^{k_1p} (1+x)^{b_1} \\ & \equiv ((1+x)^p)^{k_1} (1+x)^{b_1} \\ & \equiv (1+x^p)^{k_1}(1+x)^{b_1} \\ & \equiv (\sum\limits_{i=0}^{k_1} \binom{k_1}{i}x^{pi})(\sum\limits_{i=0}^{b_1} \dbinom{b_1}{i}x^i) \end{aligned} \]

考虑对于该式子,\(x^m\) 只能由第一个括号 \(i=k_2\),第二个括号 \(i=b_2\) 时凑出来,此时参数分别为 \(\dbinom{k_1}{k_2},\dbinom{b_1}{b_2}\)

则为

\[\binom{n}{m} \pmod p = \dbinom{k_1}{k_2} \dbinom{b_1}{b_2} \pmod p \]

得证。

8.2 扩展 Lucas 定理

扩展 Lucas 可以处理 \(p \notin \mathbb{P}\) 的情况。

我们仍考虑将非质数转化为质数,将 \(p\) 进行唯一分解,设 \(p = \prod\limits_{i=1}^r q_i^{c_i}\)

那么若我们能求出一组 \(\{ a_1,a_2,...,a_r\}\),使得满足

\[\left\{ \begin{aligned} a_1\equiv \displaystyle\binom{n}{m}&\pmod {{q_1}^{c_1}}\\ a_2\equiv \displaystyle\binom{n}{m}&\pmod {{q_2}^{c_2}}\\ &\cdots\\ a_r\equiv \displaystyle\binom{n}{m}&\pmod {{q_r}^{c_r}}\\ \end{aligned} \right. \]

那么求出 \(a\) 之后,就可以通过求解这个线性同余方程组得到 \(x \equiv \dbinom{n}{m} \pmod p\)

考虑求 \(\dbinom{n}{m} \pmod {q^k}\)。由于可能含有质因子 \(q\) 使得乘法逆元不存在,可以直接暴力地将 \(q\) 提出来,即

\[\dbinom{n}{m} = \dfrac{n!}{m!(n-m)!} = \dfrac{\frac{n!}{q^{v_q(n!)}}}{\frac{m!}{q^{v_q(m!)}} \frac{(n-m)!}{q^{v_q((n-m)!)}}} \times q^{v_q(n!) - v_q(m!) - v_q((n-m)!)} \]

此时分子分母都不含有 \(q\),可以求出乘法逆元,那么也就是只需要考虑如何求 \(\dfrac{n!}{q^{v_q(n!)}} \pmod {q^k}\)

暂时先不管分子,考虑 \(n! \pmod {q^k}\)。对于阶乘的每一项按照能否整除 \(q\) 分组,那么设 \(d = \lfloor \dfrac{n}{q} \rfloor\),那么我们单独把 \(q,2q,\cdots,dq\) 拿出来,统一再拿出来 \(q\),那么

\[n! = q^d \times d! \times \prod\limits_{i=1,(i,q)=1}^n i \]

不难发现第三部分的累乘是有长度为 \(q^k\) 的循环节的,设 \(d_k = \lfloor \dfrac{n}{q^k} \rfloor\)\(l = n \bmod q^k\),则

\[\begin{aligned} n! &= q^d \times d! \times \prod\limits_{i=1,(i,q)=1}^n i \\ &=q^d \times d! \times (\prod\limits_{i=1,(i,q)=1}^{q^k} i)^{d_k} \times \prod\limits_{i=1,(i,q)=1}^l i\end{aligned} \]

那么容易发现,若想考虑上原式子的分母,只需两边同时除下去即可,即

\[\dfrac{n!}{q^{v_q(n!)}} = \frac{d!}{q^{v_q(d!)}} \times (\prod\limits_{i=1,(i,q)=1}^{q^k} i)^{d_k} \times \prod\limits_{i=1,(i,q)=1}^l i \]

这样分解为递归问题就可以计算了。但是不难看出,第二与第三部分与威尔逊定理的扩展是相同的:

\[\dfrac{n!}{q^{v_q(n!)}} = \frac{d!}{q^{v_q(d!)}} \times ((q^k!)_q)^{d_k} \times (l!)_q \]

第二部分可以直接使用威尔逊定理的扩展 \(O(1)\) 求出。第三部分可以预处理做到 \(O(1)\)。总体的复杂度为 \(O(\log_p n)\)

最后给出一份工整的 Exlucas 代码:

Code

posted @ 2024-09-02 21:34  Aurora_Borealis  阅读(26)  评论(0编辑  收藏  举报