问题的引出
在该博客中我将着手解决这样一个问题,在求解模素数 p p p的同余式:
f ( x ) = a n x n + ⋯ + a 1 x + a 0 ≡ 0 ( m o d p ) f(x)=a_nx^n+\cdots+a_1x+a_0\equiv0\left(modp\right) f(x)=anxn+⋯+a1x+a0≡0(modp)
时,其中 a n a_n an恒不为零. 通常需要借助费马小定理和多项式的欧几里得除法将上述一个复杂的问题转化为一个次数更低的模素数同余式。
具体来说,由费马小定理可知,多项式 x p − x ( m o d p ) x^p-x\left(modp\right) xp−x(modp)对任何整数取值为零.进一步,利用多项式欧几里得除法可知存在整系数多项式 q ( x ) q(x) q(x), r ( x ) r(x) r(x)使得:
f ( x ) = q ( x ) ( x p − x ) + r ( x ) , d e g ( r ( x ) ) < d e g ( g ( x ) ) . f(x)=q(x)(x^p-x)+r(x), deg(r(x))<deg (g(x)). f(x)=q(x)(xp−x)+r(x),deg(r(x))<deg(g(x)).
从而容易将上述同余式:
f ( x ) = a n x n + ⋯ + a 1 x + a 0 ≡ 0 ( m o d p ) f(x)=a_nx^n+\cdots+a_1x+a_0\equiv0\left(modp\right) f(x)=anxn+⋯+a1x+a0≡0(modp)
降次为同余式:
r ( x ) ≡ 0 ( m o d p ) r(x)\equiv0\left(modp\right) r(x)≡0(modp)
不难证明上述两个模 p p p同余式等价.这时我便将初始的问题转化为一个次数更低的模 p p p同余式,进而方便原复杂问题的进一步求解。在这个化简过程中,起到核心作用的便是多项式的欧几里得除法,所以为了最终成功编程实现模素数 p p p任意次同余式的求解,我需要首先编程实现整系数的多项式欧几里得除法.
多项式欧几里得除法
引理(多项式欧几里得除法):
设
f ( x ) = a n x n + ⋯ + a 1 x + a 0 f(x)=a_nx^n+\cdots+a_1x+a_0 f(x)=anxn+⋯+a1x+a0
为 n n n次整系数多项式,
g ( x ) = x n + ⋯ + b 1 x + b 0 g(x)=x^n+\cdots+b_1x+b_0 g(x)=xn+⋯+b1x+b0
为 m ≥ 1 m\ge1 m≥1次首一整系数多项式,则存在整系数多项式 q ( x ) q(x)