形式陈述
输入为有限域 理路 有限域 Finite field · Galois field 底层集合有限的域。 F q 上首一、平方自由多项式 理路 多项式环 Polynomial ring 系数来自给定环、以形式不定元构造的多项式集合。 f ,deg f = n ≥ 1 。常数输入 1 另返回空因子列表;零多项式不属于此分解接口。在商代数
A = F q [ x ] / ( f ) 中,Frobenius 映射 F ( h ) = h q 是 F q -线性的。以 1 , x , … , x n − 1 为基,构造 n × n 的 Berlekamp 矩阵 Q :第 j 列是 x q j mod f 的系数向量。于是
B = ker ( Q − I ) = { h ∈ A : h q = h } . 若 f = f 1 ⋯ f r 是互异首一不可约因子的乘积,中国剩余定理 理路 环上的中国剩余定理 Chinese remainder theorem for rings 两两互素理想的交商与对应商环直积之间存在规范同构。 给出
A ≅ ∏ i = 1 r F q [ x ] / ( f i ) , B ≅ F q r , 故 dim F q B = r 。对矩阵 理路 矩阵 Matrix 以有限行列集合为索引、取值于半环,并以中间指标求和定义乘法的函数。 Q − I 作精确行化简 理路 行化简 Row reduction 用初等行变换把矩阵化为阶梯形以求解线性方程组和判定秩。 得到零空间基后,对非恒定 h ∈ B 与 a ∈ F q 求
gcd ( f , h − a ) . 在各不可约分量上 h 取某个基域常数,因此这些 GCD 把取相同常数的分量聚在一起。对每个基向量、每个 a ∈ F q ,遍历当前因子 g 并求 gcd ( g , h − a ) ;只用真因子将 g 切成该 GCD 与互补商,结果为 1 或 g 时保持该块不变。若两个不同不可约分量在每个基向量上标签都相同,它们在整个 B ≅ F q r 上也相同,矛盾。因此枚举全部基向量必将所有分量分开;得到 r 个因子时即可停止。
输入若非平方自由,应先做平方自由分解 理路 多项式平方自由分解 Square-free factorization of polynomials · Square-free decomposition 以形式导数、GCD 与正特征下的 Frobenius 开根分离不可约因子的重数。 。有重复因子时,商环会含幂零元,不能直接把“得到 r 块”解释成不可约分解。不过不动空间的维数仍等于不同不可约因子的数目:在局部环 F q [ x ] / ( p e ) 中,若 h q = h ,其模 p 的像是某个 c ∈ F q ;h − c 既幂零又满足 ( h − c ) q = h − c ,反复取 q 次幂便迫使它为零。因此该局部不动空间仍恰为常数域,分裂得到的却可能是不可约因子的幂。
直觉
Berlekamp 算法没有逐个试除不可约多项式,而是寻找在 Frobenius 下不动的“标签函数”。在每个不可约因子对应的扩域分量中,满足 z q = z 的元素恰是基域 F q ;所以一个不动元素相当于给每个未知因子贴上一个域元素标签。计算 gcd ( f , h − a ) 就把标签为 a 的分量一次取出。
关键工作由有限维线性代数完成。模 f 把任意幂压回 n 维空间,Frobenius 的不动条件变成齐次线性方程;零空间维数不仅指导分裂,还直接告诉算法共有多少个互异不可约因子。这种结构尤其适合 q 固定而 n 增长的场景,因为所有域元素都可枚举,确定性地尝试 a 不会改变关于 n 的多项式性。
图片加载失败 Frobenius 不动子空间与因子分裂
例子与边界
在 F 2 [ x ] 中取
f = x 3 + 1 = ( x + 1 ) ( x 2 + x + 1 ) . f ′ = x 2 ,与 f 互素,所以输入平方自由。以 ( 1 , x , x 2 ) 为基,平方映射给出
1 ↦ 1 , x ↦ x 2 , x 2 ↦ x 4 ≡ x ( mod f ) . 因此
Q = ( 1 0 0 0 0 1 0 1 0 ) , ker ( Q − I ) 由 1 与 h = x + x 2 张成,维数 2 预告两个因子。实际计算
gcd ( f , h ) = gcd ( x 3 + 1 , x + x 2 ) = x + 1 , 商即 x 2 + x + 1 。每个输出都通过精确除法验证,零空间本身没有“猜中因子”的概率。
复杂度声明必须保留 q 。经典确定性版本需枚举 a ∈ F q 并做稠密 n × n 线性代数;在固定 q 时它关于 n 为多项式时间,按本页逐基向量、逐常数细化的直接实现,可给出保守上界 O ( n 2 log q + q n 3 ) 次域运算,但 q 若以 log q bit 输入,这个枚举对输入长度是指数依赖。不能把“有限域上的多项式时间”省略成对 n , log q 都多项式。
具体地,先以重复平方求 z = x q mod f ,朴素成本 O ( n 2 log q ) ;再依次乘 z 得到各列,共 O ( n 3 ) 。行化简也是 O ( n 3 ) 。至多 n 个基向量各枚举 q 个常数,每次对当前因子做普通除余和 GCD;这些因子的次数和至多 n ,一次细化的保守预算为 O ( n 2 ) ,给出上述界。扩域的表示和每次域运算的 bit 成本仍须另计。大 n 时矩阵可稀疏开始却在消元中变稠密;非首一输入需先除首项,首项为零或底环不是域时则没有这一操作。零空间维数为 1 只在输入已平方自由的前提下才证明 f 不可约。
推论与应用
Berlekamp 不动子空间给出了一个很强的可检验证书:零空间基、各次 GCD 与最终乘积足以复核分解。算法还展示 Frobenius、Chinese remainder 与线性代数如何协作,把非线性的“找因子”问题转成求核再分组。编码理论和有限域构造中的小特征多项式因此常直接采用此路线。
Cantor–Zassenhaus 算法 理路 Cantor–Zassenhaus 因式分解算法 Cantor–Zassenhaus algorithm · Cantor-Zassenhaus factorization 先按不可约因子次数分组,再以随机幂、迹映射和 GCD 做 Las Vegas 等次数分裂。 通常先按不可约因子次数分组,再用随机幂与 GCD 做等次数分裂;它是 Las Vegas 算法,避免经典 Berlekamp 对全部 q 个常数的确定性扫描,在大域上更合适。两者不是“一个永远更快”:小固定域、需要完全确定性或已有高效线性代数时,Berlekamp 仍然自然;大 q 和高次数时,随机分裂及其现代变体往往占优。比较时应同时报告域大小编码、矩阵算法与随机性口径。
稠密矩阵及其零空间基合计需要 O ( n 2 ) 个域元素槽位;域元素的具体表示位数另计。
若输入来自一个首一整数多项式的模 p 约化,这里的因子表还可作为p-adic互素因子提升 理路 Hensel 互素因子提升 Hensel factor lifting · Coprime polynomial Hensel lifting · 亨泽尔因子提升 从互素首一模素数因子出发,逐位求解唯一系数修正,构造完整p-adic因子并交付有限精度乘积证书。 的起点。先把相同不可约因子的全部重数放在同一块,保证不同块彼此互素,再提升其系数;单块内部不必平方自由。提升在 Z p [ X ] 中输出因子,不会自动证明这些因子具有有理数系数,也不能在含零因子的 Z / p N Z 上原样调用本页的有限域矩阵算法。
参考资料
Elwyn R. Berlekamp, “Factoring Polynomials over Finite Fields,” Bell System Technical Journal 46(8), 1967, pp. 1853–1859.
Elwyn R. Berlekamp, “Factoring Polynomials over Large Finite Fields,” Mathematics of Computation 24(111), 1970, pp. 713–735.
Joachim von zur Gathen and Jürgen Gerhard, Modern Computer Algebra , 3rd ed., Cambridge University Press, 2013, chapter on factoring polynomials over finite fields.