域论 前置知识:抽象代数基本概念 、群论 、环论 
引入 域论 (field theory)是关于域的理论。
本文涉及的域论主要是域的扩张理论。域是对加、减、乘、除都封闭的代数结构,算法竞赛中经常需要对质数 𝑝 p 𝐅 𝑝 F p 𝐑 R 𝐂 C 快速傅里叶变换  加速实系数多项式的乘法。对于有限域也可以做类似的操作。多数读者对于有限域的扩张相对陌生,因而,了解一般的域上的扩张理论是有益的。文末给出了一些需要对有限域进行扩张的算法应用,同时也简单地讨论了部分应用中可能需要的整数环上的扩张。
与域论紧密相关的是 Galois 理论。它将域的扩张与其自同构群联系起来,从而可以通过群论的工具来理解域的扩张的性质。尽管这一理论也往往是相关代数课程的核心内容,但是与算法竞赛的内容相去甚远,故而本文不做过多介绍。有兴趣的读者应当阅读相关专业书籍。
记号  在不引起歧义时,本文可能会省略掉环和域的乘法记号,并且会将环 ( 𝑅 ,   + ,   ⋅ ) ( R , + , ⋅ ) 𝑅 R ( 𝐹 ,   + ,   ⋅ ) ( F , + , ⋅ ) 𝐹 F 𝑝 p 𝑞 q 𝑝 𝑛 p n 𝑛 n 
域的扩张 类似群、环的情形,可以建立子域和域同态的概念。
子域  对于域 𝐹 F 𝐸 E 𝐸 E 𝐹 F 子域 (subfield)。
其中,无论环和子环的定义对于幺元的处理如何,子域 𝐸 E 𝐹 F 
域同态  自域 𝐹 F 𝐸 E 𝜑   : 𝐹   → 𝐸 φ : F → E 𝐹 F 𝐸 E 域同态 (field homomorphism)。
域同态对幺元的处理  如果与本文的定义不同,环同态要求幺元映射到幺元,那么域同态自然也要求幺元映射到幺元。否则,幺元也可能映射到零元。
因为域只有平凡的理想,所以域同态要么将整个域映射到零元,要么必然是嵌入映射。这说明,域同态的讨论可以转化为子域的讨论。
在域的情形,往往更小的域是更为熟悉的域,所以,通常会转而以子域作为基点来考察更大的域。这就是域的扩张的概念。
域扩张  对于域 𝐹 F 𝐹 F 𝐸 E 𝐸 E 𝐹 F 扩张 (extension),或称 扩域 ,记作 𝐸 / 𝐹 E / F 
域扩张的记号  尽管形式上一致,但是域扩张的概念和商环并没有关系,不应混淆。
例子  复数域 𝐂 C 𝐑 R 𝐑 R 𝐐 Q 
域扩张的次数 对于域扩张 𝐸 / 𝐹 E / F 𝐸 E 𝐹 F 线性空间 。这个线性空间的维度就是域扩张的次数。
域扩张的次数  域扩张 𝐸 / 𝐹 E / F 次数 (degree),是指将 𝐸 E 𝐹 F d i m 𝐹  ( 𝐸 ) dim F  ( E ) [ 𝐸   : 𝐹 ] [ E : F ] 有限扩张 (finite extension),否则就称为 无限扩张 (infinite extension)。
例子  域扩张 𝐂 / 𝐑 C / R [ 𝐂   : 𝐑 ] [ C : R ] 2 2 𝐑 / 𝐐 R / Q 
域的扩张次数满足乘法原理。
定理  设 𝐹   ⊆ 𝐾   ⊆ 𝐸 F ⊆ K ⊆ E [ 𝐸   : 𝐹 ]   = [ 𝐸   : 𝐾 ] [ 𝐾   : 𝐹 ] [ E : F ] = [ E : K ] [ K : F ] 
证明  对于扩张次数是无限的情形,这是显然的;否则,如果 { 𝛼 𝑖 } { α i } 𝐸 E 𝐾 K { 𝛽 𝑗 } { β j } 𝐾 K 𝐹 F { 𝛼 𝑖 𝛽 𝑗 } { α i β j } 𝐸 E 𝐹 F 
本文讨论的情形主要是域的有限扩张。
域的特征 对域扩张的研究,有一个自然的起点,就是包含域 𝐹 F 𝐹 F 素子域 (prime subfield)。
素子域的结构,由域幺元的性质唯一确定。域的特征就概括了这样的性质。
域的特征  域 𝐹 F 特征 (characteristic)是使得 𝑛   ⋅ 1   = 0 n ⋅ 1 = 0 𝑛 n 𝑛 n 𝐹 F 0 0 𝑛   ⋅ 1 n ⋅ 1 𝑛 n 1 1 𝐹 F 0 0 𝐹 F 有限特征的 (finite characteristic)。
域的特征可以通过环同态来理解。整数环 𝐙 Z 0 0 1 1 𝐹 F 𝜑   : 𝐙   → 𝐹 φ : Z → F 𝜑 ( 1 )   = 1 φ ( 1 ) = 1 𝑛   ∈ 𝐍 + n ∈ N + 𝑛   ⋅ 1 n ⋅ 1 𝑛 n 1 1 𝜑 ( 𝐙 ) φ ( Z ) 𝐹 F k e r  𝜑 ker  φ 𝐙 Z ( 𝑛 ) ( n ) 𝑛   = 0 n = 0 𝑛 n 𝑛 n 
域的特征确定了素子域的结构:
当特征为 0 0 𝜑 φ 𝐙 Z 𝐹 F 𝐐 Q 𝐹 F 𝐹 F  当特征为素数 𝑝 p 𝜑 φ 𝐙 / 𝑝 𝐙 Z / p Z 𝐹 F 𝐙 / 𝑝 𝐙 Z / p Z 𝐅 𝑝 F p 𝐹 F  这些讨论实际上说明了如下结论:
定理  域 𝐹 F 0 0 𝑝 p 0 0 𝐐 Q 𝑝 p 𝐅 𝑝 F p 
定理中的 𝐐 Q 𝐅 𝑝 F p 素域 (prime field),即子域只有它自身的域。有限域必然是有限特征的,因为特征为 0 0 𝐐 Q 
特征有限的域和零特征的域性质往往不同。比如,有限特征的域有如下性质:
定理  设 𝐹 F 𝑝 p 
 域 𝐹 F 𝑝 p 𝑥   ∈ 𝐹 x ∈ F 𝑝 𝑥   = 0 p x = 0  「新手之梦」(freshman's dream),即对所有 𝑥 , 𝑦   ∈ 𝐹 x , y ∈ F ( 𝑥   + 𝑦 ) 𝑝   = 𝑥 𝑝   + 𝑦 𝑝 ( x + y ) p = x p + y p 𝑥   ↦ 𝑥 𝑝 x ↦ x p 𝐹 F Frobenius 自同态 (Frobenius endomorphism)。 证明  对于第一条性质,只要注意到 𝑝 𝑥   = ( 𝑝 1 ) 𝑥   = 0 𝑥   = 0 p x = ( p 1 ) x = 0 x = 0 ( 𝑥   + 𝑦 ) 𝑝 ( x + y ) p 𝑥 𝑝 x p 𝑦 𝑝 y p 𝑝 p ( 𝑥   + 𝑦 ) 𝑝   = 𝑥 𝑝   + 𝑦 𝑝 ( x + y ) p = x p + y p 𝑥   ↦ 𝑥 𝑝 x ↦ x p ( 𝑥 𝑦 ) 𝑝   = 𝑥 𝑝 𝑦 𝑝 ( x y ) p = x p y p 
当然,对于有限域,Frobenius 自同态必然也是满的,因而是域的自同构。
单扩张 类似于实数域扩张到复数域的情形,很多扩张可以通过向域中添加额外的元素,并规定其运算性质来完成。在一般的情形,为避免规定运算性质引起的麻烦,不妨考虑在域扩张 𝐸 / 𝐹 E / F 𝐸   ∖ 𝐹 E ∖ F 𝐹 F 𝐹 F 𝐸 E 
由子集生成的域扩张  设 𝐸 / 𝐹 E / F 𝑆   ⊆ 𝐸 S ⊆ E 由 𝑆 S 𝐹 F  (extension generated by 𝑆 S 𝐹 F 𝐹 F 𝑆 S 𝐸 E 𝐹 ( 𝑆 ) F ( S ) 
最为简单的情形自然是集合 𝑆 S 
有限生成扩张  设 𝐸 / 𝐹 E / F 𝑆   = { 𝛼 1 , ⋯ , 𝛼 𝑛 }   ⊆ 𝐸 S = { α 1 , ⋯ , α n } ⊆ E 𝐸   = 𝐹 ( 𝑆 ) E = F ( S ) 𝐸 E 𝐹 F 有限生成扩张 (finitely generated extension),也记作 𝐹 ( 𝛼 1 , ⋯ , 𝛼 𝑛 ) F ( α 1 , ⋯ , α n ) 
单扩张  设 𝐸 / 𝐹 E / F 𝛼   ∈ 𝐸 α ∈ E 𝐸   = 𝐹 ( 𝛼 ) E = F ( α ) 𝐸 E 𝐹 F 单扩张 (simple extension)。其中,元素 𝛼 α 本原元 (primitive element)。
例子  这些例子都是向 𝐐 Q 𝐂 C 
 对于无平方因子的整数 𝐷   ≠ 0 , 1 D ≠ 0 , 1 𝐐 ( √ 𝐷 ) Q ( D ) 𝐐 Q √ 𝐷   ∈ 𝐂   ∖ 𝐐 D ∈ C ∖ Q 2 2 { 1 , √ 𝐷 } { 1 , D }  域 𝐐 ( √ 2 , √ 3 ) Q ( 2 , 3 ) 𝐐 Q √ 2 2 √ 3 3 𝐐 ( √ 2 , √ 3 )   = 𝐐 ( √ 2 ) ( √ 3 )   = 𝐐 ( √ 3 ) ( √ 2 ) Q ( 2 , 3 ) = Q ( 2 ) ( 3 ) = Q ( 3 ) ( 2 ) 𝐐 ( √ 2 , √ 3 )   = 𝐐 ( √ 2   + √ 3 ) Q ( 2 , 3 ) = Q ( 2 + 3 ) 4 4 { 1 , √ 2 , √ 3 , √ 6 } { 1 , 2 , 3 , 6 }  域 𝐐 ( 𝜋 ) Q ( π ) 𝜋 π 𝐐 [ 𝜋 ]   ⊆ 𝐐 ( 𝜋 ) Q [ π ] ⊆ Q ( π ) { 1 , 𝜋 , 𝜋 2 , ⋯ } { 1 , π , π 2 , ⋯ }  域 𝐐 ( 𝜋 , e ) Q ( π , e ) 𝜋 π e e  这些例子说明,单扩张的性质可能相差悬殊。这取决于添加的元素的性质。
代数扩张 为了分析向域中添加元素可能出现的所有情形,不妨仿照前文对域的特征的讨论,考察多项式环 𝐹 [ 𝑥 ] F [ x ] 𝐸 / 𝐹 E / F 𝐹 [ 𝑥 ] F [ x ] 𝐙 Z 𝐹 F 𝑥 x 
设环同态 𝜑   : 𝐹 [ 𝑥 ]   → 𝐸 φ : F [ x ] → E 𝜑 φ 𝐹 F 𝜑 ( 𝑥 )   = 𝛼 φ ( x ) = α 𝐸 E 𝜑 ( 𝐹 [ 𝑥 ] )   = 𝐹 [ 𝛼 ] φ ( F [ x ] ) = F [ α ] k e r  𝜑 ker  φ 𝐹 [ 𝑥 ] F [ x ] ( 𝑓 ( 𝑥 ) ) ( f ( x ) ) 𝑓 ( 𝑥 )   = 0 f ( x ) = 0 𝑓 ( 𝑥 ) f ( x ) 𝐹 [ 𝑥 ] F [ x ] 
当同态的核 k e r  𝜑   = { 0 } ker  φ = { 0 } 𝐹 [ 𝑥 ] F [ x ] 𝐸 E 𝐹 [ 𝛼 ] F [ α ] 𝐸 E 𝐹 F 𝛼 α 𝐹 [ 𝛼 ] F [ α ] 𝐹 ( 𝛼 ) F ( α ) 𝐹 ( 𝑥 ) F ( x ) 𝛼 α 𝐹 F 𝛼 α 
当同态的核 k e r  𝜑   = ( 𝑓 ( 𝑥 ) ) ker  φ = ( f ( x ) ) 𝑓 ( 𝑥 ) f ( x ) 𝜑 ( 𝑓 ( 𝑥 ) )   = 𝑓 ( 𝛼 )   = 0 φ ( f ( x ) ) = f ( α ) = 0 𝛼   ∈ 𝐸 α ∈ E 𝐹 F 𝑓 ( 𝑥 ) f ( x ) 𝐹 F 𝑓 ( 𝑥 ) f ( x ) 𝜑 φ 𝐹 ( 𝛼 ) F ( α ) 
 𝐹 [ 𝑥 ] / ( 𝑓 ( 𝑥 ) ) ≅ 𝐹 ( 𝛼 ) . F [ x ] / ( f ( x ) ) ≅ F ( α ) . 此时又可以分为两种情形:
 如果 𝑓 ( 𝑥 ) f ( x ) 𝑓 ( 𝑥 )   = 𝑥   − 𝛼 f ( x ) = x − α 𝛼   ∈ 𝐹 α ∈ F 𝐹 ( 𝛼 )   = 𝐹 F ( α ) = F  其余情形,𝑓 ( 𝑥 ) f ( x ) 𝛼   ∈ 𝐸   ∖ 𝐹 α ∈ E ∖ F 𝐹 [ 𝛼 ] F [ α ] 𝐹 F 𝛼 α 𝐹 ( 𝛼 ) F ( α ) 𝐹 F 𝛼 α 𝐹 ( 𝛼 )   ⊃ 𝐹 F ( α ) ⊃ F  这些讨论启发了如下的定义:
代数元与超越元  对于扩张 𝐸 / 𝐹 E / F 𝛼   ∈ 𝐸 α ∈ E 𝐹 F 𝑓 ( 𝑥 ) f ( x ) 𝛼 α 𝐹 F 代数元 (algebraic element);否则,称元素 𝛼 α 𝐹 F 超越元 (transcendental element)。
极小多项式  对于域 𝐹 F 𝛼 α 𝛼 α 𝑓 ( 𝑥 ) f ( x ) 极小多项式 (minimal polynomial)。
此处的极小多项式就是前文分析中的不可约多项式 𝑓 ( 𝑥 ) f ( x ) 𝑓 ( 𝑥 ) f ( x ) 𝐹 F 𝛼 α 𝑓 ( 𝑥 ) f ( x ) 
例子  √ 2 2 𝐐 Q 𝑥 2   − 2 x 2 − 2 √ 2 2 𝐑 R 𝑥   − √ 2 x − 2 𝜋 π 𝐐 Q 一般地,𝐐 Q 代数数 (algebraic number),而超越元称为 超越数 (transcendental number)。特别地,如果代数数的极小多项式是首一多项式,它就称作 代数整数 (algebraic integer)。代数扩张中的全体代数整数构成环。例如,二次域 𝐐 ( √ 𝐷 ) Q ( D ) 𝐙 [ 𝜔 ] Z [ ω ] 二次整数环  页面。 代数扩张与超越扩张  对于扩张 𝐸 / 𝐹 E / F 𝐸 E 𝐹 F 𝐸 E 𝐹 F 代数扩张 (algebraic extension);否则,称域 𝐸 E 𝐹 F 超越扩张 (transcendental extension)。
单扩张的结果,根据添加元素的性质不同,可以分为两类。当添加的元素是超越元时,单扩张总是同构于有理分式域。此时,没有任何可以进一步化简的可能性。但是,当添加的元素是代数元时,单扩张实际上就是 𝐹 [ 𝛼 ] F [ α ] 𝛼 α 𝐹 [ 𝑥 ] F [ x ] 𝑥 x 
单代数扩张的重要性,也反映在如下的定理中:
定理  域扩张是有限扩张,当且仅当它是有限生成的代数扩张。
证明  设 𝐹 F 𝐸   = 𝐹 ( 𝛼 1 , ⋯ , 𝛼 𝑛 ) E = F ( α 1 , ⋯ , α n ) 𝛼 𝑖 α i 𝐹 F 𝐸 𝑖   = 𝐹 ( 𝛼 1 , ⋯ , 𝛼 𝑖 ) E i = F ( α 1 , ⋯ , α i ) 𝐸 0   = 𝐹 E 0 = F 𝐸 𝑛   = 𝐸 E n = E 𝛼 𝑖 α i 𝐸 𝑖 − 1 E i − 1 𝛼 𝑖 α i 𝐹 F 𝐸 𝑖 − 1 E i − 1 𝛼 𝑖 α i 𝐸 𝑖 − 1 E i − 1 𝛼 𝑖 α i 𝐹 F [ 𝐸 𝑖   : 𝐸 𝑖 − 1 ] [ E i : E i − 1 ] [ 𝐸   : 𝐹 ]   = ∏ 𝑛 𝑖 = 1 [ 𝐸 𝑖   : 𝐸 𝑖 − 1 ] [ E : F ] = ∏ i = 1 n [ E i : E i − 1 ] 𝐸 0   = 𝐹 E 0 = F 𝐸 𝑖 E i 𝐸   ∖ 𝐸 𝑖 E ∖ E i 𝛼 𝑖 + 1 α i + 1 𝐸 𝑖 E i 𝐸 𝑖 + 1   = 𝐸 𝑖 ( 𝛼 𝑖 + 1 ) E i + 1 = E i ( α i + 1 ) 𝐸 𝑛   = 𝐸 E n = E 
这意味着,要理解有限扩张的性质,只要理解单代数扩张即可。因为有限扩张总是可以通过有限多个的单代数扩张得到。
单代数扩张的结构与计算 本节中,设 𝐹 F 𝐸 E 𝛼   ∈ 𝐸   ∖ 𝐹 α ∈ E ∖ F 𝐹 F 𝛼 α 𝑓 ( 𝑥 ) f ( x ) 𝑓 ( 𝑥 ) f ( x ) 𝑛 n 
𝑓 ( 𝑥 ) = 𝑥 𝑛 + 𝑎 𝑛 − 1 𝑥 𝑛 − 1 + ⋯ + 𝑎 1 𝑥 + 𝑎 0 , f ( x ) = x n + a n − 1 x n − 1 + ⋯ + a 1 x + a 0 , 其中,𝑎 0 , 𝑎 1 , ⋯ , 𝑎 𝑛 − 1   ∈ 𝐹 a 0 , a 1 , ⋯ , a n − 1 ∈ F 𝑓 ( 𝑥 ) f ( x ) 𝐹 F 
同构关系 𝐹 ( 𝛼 )   ≅ 𝐹 [ 𝑥 ] / ( 𝑓 ( 𝑥 ) ) F ( α ) ≅ F [ x ] / ( f ( x ) ) 𝐹 ( 𝛼 ) F ( α ) 𝑓 ( 𝑥 ) f ( x ) 𝑛   = d e g  𝑓 ( 𝑥 ) n = deg  f ( x ) { 1 , 𝛼 , ⋯ , 𝛼 𝑛 − 1 } { 1 , α , ⋯ , α n − 1 } 
定理  在本节的假设下,扩域 𝐹 ( 𝛼 ) F ( α ) 
 𝐹 ( 𝛼 ) = { 𝜆 ( 𝛼 ) = 𝜆 0 + 𝜆 1 𝛼 + ⋯ + 𝜆 𝑛 − 1 𝛼 𝑛 − 1 : 𝜆 0 , 𝜆 1 , ⋯ , 𝜆 𝑛 − 1 ∈ 𝐹 } . F ( α ) = { λ ( α ) = λ 0 + λ 1 α + ⋯ + λ n − 1 α n − 1 : λ 0 , λ 1 , ⋯ , λ n − 1 ∈ F } . 其中,𝜆 ( 𝑥 ) λ ( x ) 𝑛 n [ 𝐹 ( 𝛼 )   : 𝐹 ]   = 𝑛 [ F ( α ) : F ] = n 𝛼 α 𝜆 ( 𝛼 ) λ ( α ) 𝜇 ( 𝛼 ) μ ( α ) 𝜆 ( 𝛼 ) λ ( α ) 𝜇 ( 𝛼 ) μ ( α ) 𝜌 ( 𝛼 ) ρ ( α ) 𝜌 ( 𝑥 ) ρ ( x ) 𝜆 ( 𝑥 ) 𝜇 ( 𝑥 ) λ ( x ) μ ( x ) 𝑓 ( 𝑥 ) f ( x ) 
当然,作为域,还可以计算 𝐹 ( 𝛼 ) F ( α ) 线性同余方程 。类比整数的做法,要计算商 𝜆 ( 𝛼 ) / 𝜇 ( 𝛼 ) λ ( α ) / μ ( α ) 𝜇 ( 𝛼 ) μ ( α ) 𝜆 ( 𝛼 ) λ ( α ) 𝜇 ( 𝛼 ) μ ( α ) 𝜇 ( 𝑥 ) 𝜉 ( 𝑥 )   ≡ 1 ( m o d 𝑓 ( 𝑥 ) ) μ ( x ) ξ ( x ) ≡ 1 ( mod f ( x ) ) 
下面,通过几个具体的例子理解计算的细节。
例子  考察扩域 𝐐 ( 𝛼 ) Q ( α ) 𝛼 α 𝑥 3   − 2 𝑥   − 2   = 0 x 3 − 2 x − 2 = 0 
 1 + 𝛼 1 + 𝛼 + 𝛼 2 1 + α 1 + α + α 2 的值。
 第一步是计算 1   + 𝛼   + 𝛼 2 1 + α + α 2 
 ( 𝑥 2 + 𝑥 + 1 ) 𝜉 ( 𝑥 ) + ( 𝑥 3 − 2 𝑥 − 2 ) 𝜈 ( 𝑥 ) = 1 ( x 2 + x + 1 ) ξ ( x ) + ( x 3 − 2 x − 2 ) ν ( x ) = 1 的解。对此应用扩展欧几里得算法。先做辗转相除法,即有如下过程:
 𝑥 3 − 2 𝑥 − 2 = ( 𝑥 − 1 ) ( 𝑥 2 + 𝑥 + 1 ) + ( − 2 𝑥 − 1 ) , 𝑥 2 + 𝑥 + 1 = ( − 1 2 𝑥 − 1 4 ) ( − 2 𝑥 − 1 ) + 3 4 , − 2 𝑥 − 1 = ( − 8 3 𝑥 − 4 3 ) 3 4 . x 3 − 2 x − 2 = ( x − 1 ) ( x 2 + x + 1 ) + ( − 2 x − 1 ) , x 2 + x + 1 = ( − 1 2 x − 1 4 ) ( − 2 x − 1 ) + 3 4 , − 2 x − 1 = ( − 8 3 x − 4 3 ) 3 4 . 再计算同余方程中的系数,即有
 3 4 = ( 𝑥 2 + 𝑥 + 1 ) + ( 1 2 𝑥 + 1 4 ) ( − 2 𝑥 − 1 ) = ( 𝑥 2 + 𝑥 + 1 ) + ( 1 2 𝑥 + 1 4 ) ( ( 𝑥 3 − 2 𝑥 − 2 ) − ( 𝑥 − 1 ) ( 𝑥 2 + 𝑥 + 1 ) ) = ( − 1 2 𝑥 2 + 1 4 𝑥 + 5 4 ) ( 𝑥 2 + 𝑥 + 1 ) + ( 1 2 𝑥 + 1 4 ) ( 𝑥 3 − 2 𝑥 − 2 ) . 3 4 = ( x 2 + x + 1 ) + ( 1 2 x + 1 4 ) ( − 2 x − 1 ) = ( x 2 + x + 1 ) + ( 1 2 x + 1 4 ) ( ( x 3 − 2 x − 2 ) − ( x − 1 ) ( x 2 + x + 1 ) ) = ( − 1 2 x 2 + 1 4 x + 5 4 ) ( x 2 + x + 1 ) + ( 1 2 x + 1 4 ) ( x 3 − 2 x − 2 ) . 因而,方程的解为
 𝜉 ( 𝑥 ) = − 2 3 𝑥 2 + 1 3 𝑥 + 5 3 ,   𝜈 ( 𝑥 ) = 2 3 𝑥 + 1 3 . ξ ( x ) = − 2 3 x 2 + 1 3 x + 5 3 ,   ν ( x ) = 2 3 x + 1 3 . 这说明 1   + 𝛼   + 𝛼 2 1 + α + α 2 
 − 2 3 𝛼 2 + 1 3 𝛼 + 5 3 . − 2 3 α 2 + 1 3 α + 5 3 . 第二步,就是计算逆元和 1   + 𝛼 1 + α 
 ( 1 + 𝛼 ) ( − 2 3 𝛼 2 + 1 3 𝛼 + 5 3 ) = − 2 3 𝛼 3 − 1 3 𝛼 2 + 2 𝛼 + 5 3 = − 2 3 ( 2 𝛼 + 2 ) − 1 3 𝛼 2 + 2 𝛼 + 5 3 = − 1 3 𝛼 2 + 2 3 𝛼 + 1 3 . ( 1 + α ) ( − 2 3 α 2 + 1 3 α + 5 3 ) = − 2 3 α 3 − 1 3 α 2 + 2 α + 5 3 = − 2 3 ( 2 α + 2 ) − 1 3 α 2 + 2 α + 5 3 = − 1 3 α 2 + 2 3 α + 1 3 . 这就是最后的答案。
在例子中只用到了 𝛼 α 𝑥 3   − 2 𝑥   − 2   = 0 x 3 − 2 x − 2 = 0 𝐂 C 𝐐 Q 
一般地,对于域 𝐹 F 𝑓 ( 𝑥 ) f ( x ) 𝛼   ≠ 𝛽 α ≠ β 𝐹 F 共轭 (conjugate)。复数域上的通常意义的共轭,就是这一概念在域扩张 𝐂 / 𝐑 C / R 
例子  考察扩域 𝐅 2 ( 𝛼 ) F 2 ( α ) 𝛼 α 𝑥 2   + 𝑥   + 1   = 0 x 2 + x + 1 = 0 𝑎   + 𝑏 𝛼 a + b α 𝑐   + 𝑑 𝛼 c + d α 
 ( 𝑎 + 𝑏 𝛼 ) + ( 𝑐 + 𝑑 𝛼 ) = ( 𝑎 + 𝑐 ) + ( 𝑏 + 𝑑 ) 𝛼 , ( 𝑎 + 𝑏 𝛼 ) ( 𝑐 + 𝑑 𝛼 ) = 𝑎 𝑐 + ( 𝑎 𝑑 + 𝑏 𝑐 ) 𝛼 + 𝑏 𝑑 𝛼 2 = ( 𝑎 𝑐 + 𝑏 𝑑 ) + ( 𝑎 𝑑 + 𝑏 𝑐 + 𝑏 𝑑 ) 𝛼 . ( a + b α ) + ( c + d α ) = ( a + c ) + ( b + d ) α , ( a + b α ) ( c + d α ) = a c + ( a d + b c ) α + b d α 2 = ( a c + b d ) + ( a d + b c + b d ) α . 这提供了类似于复数域上的运算法则。大多数读者对于这样的根 𝛼 α [ 𝐅 2 ( 𝛼 )   : 𝐅 2 ]   = 2 [ F 2 ( α ) : F 2 ] = 2 | 𝐅 2 ( 𝛼 ) |   = 4 | F 2 ( α ) | = 4 4 4 
在小规模运算时,对首一多项式取模 𝑓 ( 𝑥 ) f ( x ) 
𝑥 𝑛 = − 𝑎 𝑛 − 1 𝑥 𝑛 − 1 − ⋯ − 𝑎 1 𝑥 − 𝑎 0 x n = − a n − 1 x n − 1 − ⋯ − a 1 x − a 0 对目标多项式降次来进行。而且,对于低次的扩张,往往可以直接计算出系数的运算规则,使用类似复数类的实现而不必每次都计算取模等过程。
作为单代数扩张的实例,可以参考下文中的有限域的 参考实现 。
此处描述的算法在实践中都只能处理扩张次数比较低的情形,这对于绝大多数算法竞赛中的应用都是足够的。对于扩张次数高到成为复杂度瓶颈的情形,应当采取适当的多项式技术(快速傅里叶变换 、快速数论变换 、多项式快速取余 、多项式欧几里得  等)加速运算。
分裂域 上文已经对单代数扩张的结构做了详尽的讨论。但是,这样的扩张往往并不充分:
例子  考察扩张 𝐐 ( 3 √ 2 ) / 𝐐 Q ( 2 3 ) / Q 3 √ 2 2 3 𝐐 Q 𝑥 3   − 2 x 3 − 2 𝐂 C 𝑥 3   − 2 x 3 − 2 3 √ 2 , 3 √ 2 𝜔 , 3 √ 2 𝜔 2 2 3 , 2 3 ω , 2 3 ω 2 𝜔   = e 2 𝜋 i / 3 ω = e 2 π i / 3 1 1 𝐐 ( 3 √ 2 )   ≅ 𝐐 ( 3 √ 2 𝜔 )   ≅ 𝐐 ( 3 √ 2 𝜔 2 ) Q ( 2 3 ) ≅ Q ( 2 3 ω ) ≅ Q ( 2 3 ω 2 ) 𝐐 ( 3 √ 2 ) Q ( 2 3 ) 3 √ 2   + 3 √ 2 𝜔 2 3 + 2 3 ω 𝐐 ( 3 √ 2 ) Q ( 2 3 ) 𝐐 ( 3 √ 2 , 3 √ 2 𝜔 , 3 √ 2 𝜔 2 ) Q ( 2 3 , 2 3 ω , 2 3 ω 2 ) 
 前文已经说明,要做这样的扩张,只要对元素逐个做单扩张即可。应当注意的是,3 √ 2 𝜔 2 3 ω 𝐐 Q 𝐐 ( 3 √ 2 ) Q ( 2 3 ) 𝑥 3   − 2   ∈ 𝐐 [ 𝑥 ] x 3 − 2 ∈ Q [ x ] 𝑥 2   + 3 √ 2 𝑥   + 3 √ 4   ∈ 𝐐 ( 3 √ 2 ) [ 𝑥 ] x 2 + 2 3 x + 4 3 ∈ Q ( 2 3 ) [ x ] 
 𝑥 3 − 2 = ( 𝑥 − 3 √ 2 ) ( 𝑥 2 + 3 √ 2 𝑥 + 3 √ 4 ) . x 3 − 2 = ( x − 2 3 ) ( x 2 + 2 3 x + 4 3 ) . 原来的极小多项式在域的扩张后分解出一次因子,因而剩余的根的极小多项式的次数低于原来的域上的极小多项式。域不断扩张的过程,就是多项式不断「分裂」的过程。因此,每次单扩张时,都需要重新确定极小多项式。
将多项式的全部根都添加到域中,得到的就是多项式的分裂域。
分裂  设 𝐹 F 𝑓 ( 𝑥 ) f ( x ) 𝐹 [ 𝑥 ] F [ x ] 𝑓 ( 𝑥 ) f ( x ) 𝐹 F 分裂 (split)。
分裂域  对于域 𝐹 F 𝑓 ( 𝑥 ) f ( x ) 𝐸 / 𝐹 E / F 𝑓 ( 𝑥 ) f ( x ) 𝐸 E 𝐸 E 𝐸 E 𝑓 ( 𝑥 ) f ( x ) 分裂域 (splitting field)。
可以证明,如同单扩张一样,给定多项式的分裂域在同构意义下是唯一确定的,与具体的构造方法无关。分裂域总是有限扩张。
正规扩张  对于代数扩张 𝐸 / 𝐹 E / F 𝛼   ∈ 𝐸 α ∈ E 𝛼 α 𝐸 E 𝐸 E 𝐹 F 正规扩张 (normal extension)。
正规扩张在 Galois 理论中起到基础的作用。
代数闭域 前文提及的多数扩张的概念原则上需要在比扩张更大的域内进行。尽管对于单扩张的情形,通过多项式环可以不依赖于更大的域构造出域的扩张,但是对于一般的情形并没有这样的手段。对于有理数域 𝐐 Q 𝐑 R 𝐂 C 
代数闭包  对于域 𝐹 F ―― 𝐹 F ― 𝐹 F 𝑓 ( 𝑥 )   ∈ 𝐹 [ 𝑥 ] f ( x ) ∈ F [ x ] ―― 𝐹 F ― ―― 𝐹 F ― 𝐹 F 代数闭包 (algebraic closure)。
代数闭包是域上的正规扩张。它的构造方式也基本上就是将所有可能的多项式的根添加到域中。而且和分裂域一样,某个域的代数闭包在同构意义下也是唯一的。
定理  任何域 𝐹 F 
证明  证明的困难来自于集合论。此处引用 Artin 的一个证明。
 证明的第一部分从 𝐹 F 𝐾 1 / 𝐹 K 1 / F 𝐹 F 𝐾 1 K 1 𝐹 F 𝑅   = 𝐹 [ ⋯ , 𝑥 𝑓 , ⋯ ] R = F [ ⋯ , x f , ⋯ ] 𝑥 𝑓 x f 𝐹 F 𝑓 ( 𝑥 𝑓 ) f ( x f ) 𝐼 I 𝐼   ≠ 𝑅 I ≠ R 𝑀   ⊇ 𝐼 M ⊇ I 1   ∈ 𝐼 1 ∈ I 𝐹 F 𝑓 𝑖 f i 𝑅 R 𝑔 𝑖 g i 𝑔 1 𝑓 1 ( 𝑥 𝑓 1 )   + ⋯   + 𝑔 𝑘 𝑓 𝑘 ( 𝑥 𝑓 𝑘 )   = 1 g 1 f 1 ( x f 1 ) + ⋯ + g k f k ( x f k ) = 1 𝐹 ( 𝛼 1 , ⋯ , 𝛼 𝑘 ) F ( α 1 , ⋯ , α k ) 𝐹 F 𝑓 𝑖 ( 𝑥 ) f i ( x ) 𝛼 𝑖 α i 𝐹 ( 𝛼 1 , ⋯ , 𝛼 𝑘 ) F ( α 1 , ⋯ , α k ) 𝑥 𝑓 𝑖 x f i 𝛼 𝑖 α i 𝑔 𝑖 g i 𝑥 𝑓 x f 0 0 𝐹 ( 𝛼 1 , ⋯ , 𝛼 𝑘 ) F ( α 1 , ⋯ , α k ) 0   = 1 0 = 1 𝐼   ≠ 𝑅 I ≠ R 𝑀 M 𝑅 / 𝑀 R / M 𝐾 1 K 1 𝐹 F 𝑓 ( 𝑥 ) f ( x ) 𝐾 1 K 1 ――― 𝑥 𝑓 x f ― 
 证明的第二部分则归纳地得到了包含 𝐹 F 𝐾 K 𝐾 𝑖 K i 𝐾 𝑖 + 1 K i + 1 𝐾 𝑖 K i 𝐾 𝑖 + 1 K i + 1 𝐾 𝑖 K i 𝐾 𝑖 + 1 K i + 1 𝐾   = ⋃ ∞ 𝑖 = 1 𝐾 𝑖 K = ⋃ i = 1 ∞ K i 𝐾 K 𝐾 𝑖 K i 𝐾 𝑖 + 1   ⊆ 𝐾 K i + 1 ⊆ K 𝐾 K 𝐾 K 𝐾 K 
 最后,令 𝐾 K 𝐹 F ―― 𝐹 F ― 𝛼 , 𝛽   ∈ ―― 𝐹 α , β ∈ F ― 𝛼   ± 𝛽 , 𝛼 𝛽 , 𝛼 / 𝛽   ∈ 𝐹 ( 𝛼 , 𝛽 )   ⊆ ―― 𝐹 α ± β , α β , α / β ∈ F ( α , β ) ⊆ F ― 𝐹 F 𝐹 F 𝐹 F 𝑓 ( 𝑥 ) f ( x ) 𝐹 F ―― 𝐹 F ― ―― 𝐹 F ― 𝐹 F 
例子  实数域 𝐑 R 𝐂 C  有理数域 𝐐 Q 𝐂 / 𝐐 C / Q ―― 𝐐 Q ―  所有的代数闭包的代数扩张都是平凡的。这样的域称为代数闭域。
代数闭域  如果域 𝐹 F 𝑓 ( 𝑥 ) f ( x ) 𝛼   ∈ 𝐹 α ∈ F 𝐹 F 代数闭域 (algebraically closed field)。
事实上,它有如下等价定义:
定理  对于域 𝐹 F 
 域 𝐹 F  域 𝐹 F 𝑓 ( 𝑥 ) f ( x )  域 𝐹 F  域 𝐹 F  域 𝐹 F  域 𝐹 F  证明  前五条性质的等价性显然,考察定义即可。对于第六条,代数闭域显然是自身的代数闭包,因为它没有非平凡的代数扩张;反过来,要证明域 𝐹 F ―― 𝐹 F ― 𝐹 F 𝑓 ( 𝑥 ) f ( x ) ―― 𝐹 F ― 𝛼 α 𝑓 ( 𝑥 ) f ( x ) 𝑓 ( 𝑥 ) f ( x ) 𝑓 ( 𝑥 ) f ( x ) 𝑆   ⊆ ―― 𝐹 S ⊆ F ― 𝐹 ( 𝑆 ) ( 𝛼 )   = 𝐹 ( 𝑆   ∪ { 𝛼 } ) F ( S ) ( α ) = F ( S ∪ { α } ) 𝛼 α 𝐹 F 𝛼 α 𝐹 F ―― 𝐹 F ― 𝛼   ∈ ―― 𝐹 α ∈ F ― ―― 𝐹 F ― 
最后,代数基本定理  𝐂 C 𝐑 R 𝐂 C 
可分扩张 分裂域的概念保证了对于任何域上的多项式,总有扩域能够包括它的所有根,且分裂域精确地给出了这样的最小的扩域。多项式的性质和它的分裂域的性质紧密联系。但是,如果希望通过多项式的分裂域来研究多项式的性质,那么首先要面临的一个问题就是,多项式的分裂域与多项式的根的重数无关。因而,如果有可能,应当考虑多项式的某种意义上的「最简表示」。受此启发,把在域的代数闭包中也没有重根的多项式称为可分多项式。
可分多项式  对于域 𝐹 F 𝑓 ( 𝑥 ) f ( x ) 𝑓 ( 𝑥 ) f ( x ) 𝐹 F ―― 𝐹 F ― 𝑓 ( 𝑥 ) f ( x ) 可分的 (separable)。
因为总是要扩张到域 𝐹 F 𝐹 F 𝐹 F 𝐹 F 
熟悉分析学的读者知道,多项式函数的重根有无可以通过它的导数判断:多项式函数的重根同样是它的导数的根。虽然多项式和多项式函数并非一致的概念,但是判断多项式函数重根有无的方法可以类比地迁移到多项式上。多项式的导数可以形式地定义如下:
形式导数  域 𝐹 F 
 𝑓 ( 𝑥 ) = 𝑎 0 + 𝑎 1 𝑥 + 𝑎 2 𝑥 2 + ⋯ + 𝑎 𝑛 − 1 𝑥 𝑛 − 1 + 𝑎 𝑛 𝑥 𝑛 = 𝑛 ∑ 𝑖 = 0 𝑎 𝑖 𝑥 𝑖 f ( x ) = a 0 + a 1 x + a 2 x 2 + ⋯ + a n − 1 x n − 1 + a n x n = ∑ i = 0 n a i x i 的 (形式)导数 (derivative),记作 𝐷 𝑓 ( 𝑥 ) D f ( x ) 
 𝐷 𝑓 ( 𝑥 ) = 𝑎 1 + 2 𝑎 2 𝑥 + ⋯ + ( 𝑛 − 1 ) 𝑎 𝑛 − 1 𝑥 𝑛 − 1 + 𝑛 𝑎 𝑛 𝑥 𝑛 − 1 = 𝑛 ∑ 𝑖 = 1 𝑖 𝑎 𝑖 𝑥 𝑖 − 1 . D f ( x ) = a 1 + 2 a 2 x + ⋯ + ( n − 1 ) a n − 1 x n − 1 + n a n x n − 1 = ∑ i = 1 n i a i x i − 1 . 这个定义对于所有域上的多项式都适用,不依赖于任何拓扑结构,此处的导数算子 𝐷 D 𝐷 ( 𝑓 ( 𝑥 ) 𝑔 ( 𝑥 ) )   = ( 𝐷 𝑓 ( 𝑥 ) ) 𝑔 ( 𝑥 )   + 𝑓 ( 𝑥 ) ( 𝐷 𝑔 ( 𝑥 ) ) D ( f ( x ) g ( x ) ) = ( D f ( x ) ) g ( x ) + f ( x ) ( D g ( x ) ) 
进而,要检查多项式 𝑓 ( 𝑥 ) f ( x ) 𝐷 𝑓 ( 𝑥 ) D f ( x ) 
定理  对于域 𝐹 F 𝑓 ( 𝑥 ) f ( x ) 𝑓 ( 𝑥 ) f ( x ) 𝛼 α 𝐷 𝑓 ( 𝑥 ) D f ( x ) 𝛼 α 𝑓 ( 𝑥 ) f ( x ) 𝑓 ( 𝑥 ) f ( x ) 𝐷 𝑓 ( 𝑥 ) D f ( x ) g c d ( 𝑓 ( 𝑥 ) , 𝐷 𝑓 ( 𝑥 ) )   = 1 gcd ( f ( x ) , D f ( x ) ) = 1 
证明  首先,因为带余除法在扩域中依然保持,欧几里得算法的结果也和扩域的选取无关,所以只要在分裂域中讨论它们的公因子就好了。由此,设 𝛼 α 𝑓 ( 𝑥 ) f ( x ) 𝑘   > 1 k > 1 𝑓 ( 𝑥 )   = ( 𝑥   − 𝛼 ) 𝑘 𝑔 ( 𝑥 ) f ( x ) = ( x − α ) k g ( x ) 𝐷 𝑓 ( 𝑥 )   = 𝑘 ( 𝑥   − 𝛼 ) 𝑘 − 1 𝑔 ( 𝑥 )   + ( 𝑥   − 𝛼 ) 𝑘 𝐷 𝑔 ( 𝑥 ) D f ( x ) = k ( x − α ) k − 1 g ( x ) + ( x − α ) k D g ( x ) 𝛼 α 𝑓 ( 𝑥 ) f ( x ) 𝐷 𝑓 ( 𝑥 ) D f ( x ) 𝛼 α 𝑓 ( 𝑥 )   = ( 𝑥   − 𝛼 ) 𝑔 ( 𝑥 ) f ( x ) = ( x − α ) g ( x ) 𝐷 𝑓 ( 𝑥 )   = ( 𝑥   − 𝛼 ) 𝐷 𝑔 ( 𝑥 )   + 𝑔 ( 𝑥 ) D f ( x ) = ( x − α ) D g ( x ) + g ( x ) 𝛼 α 𝑔 ( 𝑥 ) g ( x ) 𝛼 α 𝑓 ( 𝑥 ) f ( x ) 𝑓 ( 𝑥 ) f ( x ) 𝛼 α 𝑥   − 𝛼 x − α g c d ( 𝑓 ( 𝑥 ) , 𝐷 𝑓 ( 𝑥 ) ) gcd ( f ( x ) , D f ( x ) ) 𝑓 ( 𝑥 ) f ( x ) g c d ( 𝑓 ( 𝑥 ) , 𝐷 𝑓 ( 𝑥 ) ) gcd ( f ( x ) , D f ( x ) ) 
域上的多项式总是可以分解为若干个不可约多项式的乘积。因为(相伴意义下)不同的不可约多项式总是有着不同的根,根的重复自然联系到相应的多项式因子的重复。那么,如果多项式的分解中没有重复的不可约因子,是否就能判断多项式可分呢?换句话说,不可约的多项式是否都可分?很遗憾,在一般的情形下,无法得到肯定的答案。问题出现在有限特征的域。
对于域 𝐹 F 𝑓 ( 𝑥 ) f ( x ) g c d ( 𝑓 ( 𝑥 ) , 𝐷 𝑓 ( 𝑥 ) ) gcd ( f ( x ) , D f ( x ) ) 𝑓 ( 𝑥 ) f ( x ) 1 1 𝑓 ( 𝑥 ) f ( x ) 𝑓 ( 𝑥 ) f ( x ) 𝐷 𝑓 ( 𝑥 )   = 0 D f ( x ) = 0 d e g  𝐷 𝑓 ( 𝑥 )   < d e g  𝑓 ( 𝑥 ) deg  D f ( x ) < deg  f ( x ) 𝑓 ( 𝑥 ) f ( x ) 𝐷 𝑓 ( 𝑥 ) D f ( x ) 𝐷 𝑓 ( 𝑥 )   = 0 D f ( x ) = 0 
对于特征为 𝑝 p 𝐹 F 𝐷 𝑓 ( 𝑥 )   = 0 D f ( x ) = 0 𝑝 p 𝑓 ( 𝑥 ) f ( x ) 
𝑓 ( 𝑥 ) = 𝑎 0 + 𝑎 𝑝 𝑥 𝑝 + 𝑎 2 𝑝 𝑥 2 𝑝 + ⋯ + 𝑎 ( 𝑘 − 1 ) 𝑝 𝑥 ( 𝑘 − 1 ) 𝑝 + 𝑎 𝑘 𝑝 𝑥 𝑘 𝑝 . f ( x ) = a 0 + a p x p + a 2 p x 2 p + ⋯ + a ( k − 1 ) p x ( k − 1 ) p + a k p x k p . 如果真的存在域 𝐹 F 𝑓 ( 𝑥 ) f ( x ) 𝐹 F 𝑝 p 𝑎 𝑗 𝑝 a j p 𝑏 𝑗   ∈ 𝐹 b j ∈ F 𝑎 𝑗 𝑝 a j p 𝑏 𝑝 𝑗 b j p 
𝑓 ( 𝑥 ) = 𝑎 0 + 𝑎 𝑝 𝑥 𝑝 + 𝑎 2 𝑝 𝑥 2 𝑝 + ⋯ + 𝑎 ( 𝑘 − 1 ) 𝑝 𝑥 ( 𝑘 − 1 ) 𝑝 + 𝑎 𝑘 𝑝 𝑥 𝑘 𝑝 = 𝑏 𝑝 0 + 𝑏 𝑝 1 𝑥 𝑝 + 𝑏 𝑝 2 𝑥 2 𝑝 + ⋯ + 𝑏 𝑝 𝑘 − 1 𝑥 ( 𝑘 − 1 ) 𝑝 + 𝑏 𝑝 𝑘 𝑥 𝑘 𝑝 = ( 𝑏 0 + 𝑏 1 𝑥 + 𝑏 2 𝑥 + ⋯ + 𝑏 𝑘 − 1 𝑥 𝑘 − 1 + 𝑏 𝑘 𝑥 𝑘 ) 𝑝 . f ( x ) = a 0 + a p x p + a 2 p x 2 p + ⋯ + a ( k − 1 ) p x ( k − 1 ) p + a k p x k p = b 0 p + b 1 p x p + b 2 p x 2 p + ⋯ + b k − 1 p x ( k − 1 ) p + b k p x k p = ( b 0 + b 1 x + b 2 x + ⋯ + b k − 1 x k − 1 + b k x k ) p . 因而,这样的域 𝐹 F 
完美域  如果域 𝐹 F 完美域 (perfect field)。
对于完美域,可分多项式的概念和唯一分解中没有平方因子的多项式的概念是等同的。
定理  设域 𝐹 F 𝐹 F 
本节的讨论其实已经足够给出移除多项式中的重复因子的方法,它是对多项式的因式分解算法中的关键步骤。但这超出了本文范畴,有兴趣的读者可以参考文末的相关资料。
这些讨论其实也给出了完美域的刻画:
定理  域 𝐹 F 𝐹 F 𝐹 F 𝑝 p 𝑥   ∈ 𝐹 x ∈ F 𝑝 p 
有理数域 𝐐 Q 𝐅 𝑞 F q 
对于域不是完美域的情形,的确存在不可分的不可约多项式。
例子  考虑 𝐅 2 F 2 𝐅 2 ( 𝑡 ) F 2 ( t ) 𝑥 2   − 𝑡 x 2 − t 𝐅 2 ( 𝑡 ) F 2 ( t ) 𝐅 2 [ 𝑡 ] F 2 [ t ] 𝑡 t 𝐅 2 [ 𝑡 ] F 2 [ t ] 𝑡 t 𝑥 2   − 𝑡 x 2 − t 𝐅 2 [ 𝑡 ] F 2 [ t ] 𝐅 2 ( 𝑡 ) F 2 ( t ) 0 0 𝑥 2   − 𝑡 x 2 − t 𝐅 2 ( 𝑡 ) ( √ 𝑡 ) F 2 ( t ) ( t ) √ 𝑡 t 
最后回到域的扩张的讨论。
可分扩张  对于代数扩张 𝐸 / 𝐹 E / F 𝛼   ∈ 𝐸 α ∈ E 𝛼 α 𝐸 E 𝐹 F 可分扩张 (seperable extension)。
完美域上的代数扩张都是可分扩张。这也可以作为完美域的等价定义。
如果一个代数扩张既是正规扩张,也是可分扩张,它也称作 Galois 扩张。Galois 扩张中,任何不可约多项式都没有重根,且根的数目都恰好等于多项式的次数,因而对根的置换可以充分地反映域扩张和多项式的性质。这样的扩张提供了建立 Galois 理论的基石。有兴趣的读者可以参考文末的相关资料。
分圆域 作为域扩张的简单例子,本节讨论分圆域。另一个域扩张的简单例子是 二次域 。
单位根群 复数域 𝐂 C 𝑥 𝑛   = 1 x n = 1 𝑛 n 𝑛 n 𝜁 𝑛   = e 2 𝜋 i / 𝑛 ζ n = e 2 π i / n 𝑛 n 𝐶 𝑛   = { 𝜁 𝑘 𝑛   : 𝑘   ∈ 𝐙 } C n = { ζ n k : k ∈ Z } 𝐶 𝑛 C n 𝑛 n ⟨ 𝜁 𝑛 ⟩ ⟨ ζ n ⟩ 𝑛 n 𝐶 𝑛 C n 𝑛 n 𝑛 n 𝑛 n 𝑛 n 𝑃 𝑛   = { 𝜁 𝑘 𝑛   : 𝑘   ∈ 𝐙 , 𝑘   ⟂ 𝑛 } P n = { ζ n k : k ∈ Z , k ⟂ n } 𝜑 ( 𝑛 ) φ ( n ) 𝜑 ( 𝑛 ) φ ( n ) 欧拉函数 。将单位根群 𝐶 𝑛 C n 
𝐶 𝑛 = ⋃ 𝑑 | 𝑛 𝑃 𝑑 . C n = ⋃ d | n P d . 对两边元素计数,就得到恒等式 𝑛   = ∑ 𝑑 ∣ 𝑛 𝜑 ( 𝑑 ) n = ∑ d ∣ n φ ( d ) 
分圆域 分圆域是将单位根添加到有理数域中得到的扩域。
分圆域  将 𝑛 n 𝜁 𝑛   = e 2 𝜋 i / 𝑛 ζ n = e 2 π i / n 𝐐 Q 𝐐 ( 𝜁 𝑛 ) Q ( ζ n ) 𝑛 n 𝑛 n 
因为全体 𝑛 n ⟨ 𝜁 𝑛 ⟩ ⟨ ζ n ⟩ 𝐐 ( 𝜁 𝑛 ) Q ( ζ n ) 𝑛 n 𝐐 ( 𝜁 𝑛 ) Q ( ζ n ) 𝐐 Q 𝑥 𝑛   − 1 x n − 1 
定理  分圆域 𝐐 ( 𝜁 𝑛 ) Q ( ζ n ) 𝐐 Q 𝑥 𝑛   − 1 x n − 1 
证明  设 𝐹 F 𝐐 Q 𝑥 𝑛   − 1 x n − 1 𝐐 ( 𝜁 𝑛 ) Q ( ζ n ) 𝑥 𝑛   − 1 x n − 1 𝐹   ⊆ 𝐐 ( 𝜁 𝑛 ) F ⊆ Q ( ζ n ) 𝜁 𝑛   ∈ 𝐹 ζ n ∈ F 𝐐 ( 𝜁 𝑛 )   = 𝐹 Q ( ζ n ) = F 𝐹   = 𝐐 ( 𝜁 𝑛 ) F = Q ( ζ n ) 
这可以作为分圆域的等价定义。其实,将任何 𝑛 n 𝐐 ( 𝜁 𝑛 ) Q ( ζ n ) 
分圆多项式 分圆域 𝐐 ( 𝜁 𝑛 ) Q ( ζ n ) 𝐐 Q 𝜁 𝑛 ζ n 𝑓 ( 𝑥 ) f ( x ) 𝜁 𝑛 ζ n 𝑥 𝑛   − 1 x n − 1 𝑓 ( 𝑥 ) f ( x ) 𝑥 𝑛   − 1 x n − 1 𝑥 𝑛   − 1 x n − 1 𝐐 [ 𝑥 ] Q [ x ] 𝐙 [ 𝑥 ] Z [ x ] 
因为 𝐐 ( 𝜁 𝑛 ) Q ( ζ n ) 𝑥 𝑛   − 1 x n − 1 
𝑥 𝑛 − 1 = ∏ 𝜁 ∈ 𝐶 𝑛 ( 𝑥 − 𝜁 ) = ∏ 𝑑 ∣ 𝑛 ∏ 𝜁 ∈ 𝑃 𝑑 ( 𝑥 − 𝜁 ) . x n − 1 = ∏ ζ ∈ C n ( x − ζ ) = ∏ d ∣ n ∏ ζ ∈ P d ( x − ζ ) . 因为不同阶的单位根的代数性质不同,它们必然不会是同一个不可约多项式的根。因此,要考察 𝜁 𝑛 ζ n 
Φ 𝑛 ( 𝑥 ) = ∏ 𝜁 ∈ 𝑃 𝑛 ( 𝑥 − 𝜁 ) Φ n ( x ) = ∏ ζ ∈ P n ( x − ζ ) 即可。单位根 𝜁 𝑛 ζ n Φ 𝑛 ( 𝑥 ) Φ n ( x ) Φ 𝑛 ( 𝑥 ) Φ n ( x ) 
定理  Φ 𝑛 ( 𝑥 ) Φ n ( x ) 𝐙 [ 𝑥 ] Z [ x ] 
证明  由定义,Φ 𝑛 ( 𝑥 ) Φ n ( x ) Φ 𝑛 ( 𝑥 )   ∈ 𝐙 [ 𝑥 ] Φ n ( x ) ∈ Z [ x ] 𝑥 𝑛   − 1 x n − 1 𝐙 [ 𝑥 ] Z [ x ] 𝐐 [ 𝑥 ] Q [ x ] 𝑓 ( 𝑥 ) f ( x ) 𝐐 [ 𝑥 ] Q [ x ] 𝐐 ( 𝜁 𝑛 ) Q ( ζ n ) 𝑛 n 𝑃 𝑑 P d 𝑃 𝑑 P d 𝑓 ( 𝑥 ) f ( x ) Φ 𝑑 ( 𝑥 ) Φ d ( x ) Φ 𝑛 ( 𝑥 ) Φ n ( x ) 
 接下来,要证明 Φ 𝑛 ( 𝑥 ) Φ n ( x ) 𝐙 [ 𝑥 ] Z [ x ] 𝑓 ( 𝑥 ) 𝑔 ( 𝑥 ) f ( x ) g ( x ) 𝑓 ( 𝑥 ) f ( x ) 𝐙 [ 𝑥 ] Z [ x ] 𝑓 ( 𝑥 ) f ( x ) 𝑛 n 𝜁 ζ 𝑓 ( 𝑥 ) f ( x ) 𝑘   ⟂ 𝑛 k ⟂ n 𝜁 𝑘 ζ k 𝑓 ( 𝑥 ) f ( x ) 𝑘 k 𝑝   ⟂ 𝑛 p ⟂ n 𝜁 𝑝 ζ p 𝑓 ( 𝑥 ) f ( x ) 𝜁 𝑝 ζ p 𝑔 ( 𝑥 ) g ( x ) 𝜁 ζ 𝐙 [ 𝑥 ] Z [ x ] 𝑓 ( 𝑥 ) f ( x ) 𝑔 ( 𝑥 𝑝 ) g ( x p ) 𝑓 ( 𝑥 ) f ( x ) 𝜁 ζ 𝐐 Q 𝑓 ( 𝑥 ) f ( x ) 𝑔 ( 𝑥 𝑝 ) g ( x p ) ℎ ( 𝑥 )   ∈ 𝐙 [ 𝑥 ] h ( x ) ∈ Z [ x ] 𝑔 ( 𝑥 𝑝 )   = 𝑓 ( 𝑥 ) ℎ ( 𝑥 ) g ( x p ) = f ( x ) h ( x ) 𝑝 p 𝐅 𝑝 [ 𝑥 ] F p [ x ] ―― 𝑔 ( 𝑥 𝑝 )   = ―― 𝑓 ( 𝑥 ) ―― ℎ ( 𝑥 ) g ― ( x p ) = f ― ( x ) h ― ( x ) ―― 𝑔 ( 𝑥 ) 𝑝   = ―― 𝑓 ( 𝑥 ) ―― ℎ ( 𝑥 ) g ― ( x ) p = f ― ( x ) h ― ( x ) 𝐅 𝑝 [ 𝑥 ] F p [ x ] ―― 𝑔 ( 𝑥 ) g ― ( x ) ―― 𝑓 ( 𝑥 ) f ― ( x ) 𝑥 𝑛   − ―― 1   = ―― 𝑓 ( 𝑥 ) ―― 𝑔 ( 𝑥 ) x n − 1 ― = f ― ( x ) g ― ( x ) 𝐅 𝑝 F p 𝑝   ⟂ 𝑛 p ⟂ n 𝑛 𝑥 𝑛 − 1 n x n − 1 𝜁 𝑝 ζ p 𝑓 ( 𝑥 ) f ( x ) 𝑓 ( 𝑥 ) f ( x ) 𝑛 n Φ 𝑛 ( 𝑥 ) Φ n ( x ) 
这就说明,它就是 𝜁 𝑛 ζ n 𝑛 n 𝑛 n 𝜑 ( 𝑛 ) φ ( n ) 𝑛 n 𝜑 ( 𝑛 ) φ ( n ) 欧拉函数 。这也说明,𝐐 ( 𝜁 𝑛 ) / 𝐐 Q ( ζ n ) / Q 𝜑 ( 𝑛 ) φ ( n ) 
分圆域 𝐐 ( 𝜁 𝑛 ) Q ( ζ n ) 𝐙 [ 𝜁 𝑛 ] Z [ ζ n ] 𝜑 ( 𝑛 )   = 2 φ ( n ) = 2 二次扩张 。具体来说,𝐐 ( 𝜁 4 ) Q ( ζ 4 ) 𝐐 ( √ − 1 ) Q ( − 1 ) 𝐐 ( 𝜁 3 ) Q ( ζ 3 ) 𝐐 ( 𝜁 6 ) Q ( ζ 6 ) 𝐐 ( √ − 3 ) Q ( − 3 ) 
利用分圆多项式,多项式 𝑥 𝑛   − 1 x n − 1 𝐙 [ 𝑥 ] Z [ x ] 
𝑥 𝑛 − 1 = ∏ 𝑑 ∣ 𝑛 Φ 𝑑 ( 𝑥 ) . x n − 1 = ∏ d ∣ n Φ d ( x ) . 因此,( 𝑥 𝑑   − 1 )   ∣ ( 𝑥 𝑛   − 1 ) ( x d − 1 ) ∣ ( x n − 1 ) 𝑑   ∣ 𝑛 d ∣ n Möbius 反演  可得
Φ 𝑑 ( 𝑥 ) = ∏ 𝑑 ∣ 𝑛 ( 𝑥 𝑑 − 1 ) 𝜇 ( 𝑛 / 𝑑 ) . Φ d ( x ) = ∏ d ∣ n ( x d − 1 ) μ ( n / d ) . 利用这个表达式,可以递归地计算出全部的分圆多项式。此处给出前几个分圆多项式的例子,便于读者熟悉。
分圆多项式  前 1 0 10 
 Φ 1 ( 𝑥 ) = 𝑥 − 1 , Φ 2 ( 𝑥 ) = 𝑥 + 1 , Φ 3 ( 𝑥 ) = 𝑥 2 + 𝑥 + 1 , Φ 4 ( 𝑥 ) = 𝑥 2 + 1 , Φ 5 ( 𝑥 ) = 𝑥 4 + 𝑥 3 + 𝑥 2 + 𝑥 + 1 , Φ 6 ( 𝑥 ) = 𝑥 2 − 𝑥 + 1 , Φ 7 ( 𝑥 ) = 𝑥 6 + 𝑥 5 + 𝑥 4 + 𝑥 3 + 𝑥 2 + 𝑥 + 1 , Φ 8 ( 𝑥 ) = 𝑥 4 + 1 , Φ 9 ( 𝑥 ) = 𝑥 6 + 𝑥 3 + 1 , Φ 1 0 ( 𝑥 ) = 𝑥 4 − 𝑥 3 + 𝑥 2 − 𝑥 + 1 . Φ 1 ( x ) = x − 1 , Φ 2 ( x ) = x + 1 , Φ 3 ( x ) = x 2 + x + 1 , Φ 4 ( x ) = x 2 + 1 , Φ 5 ( x ) = x 4 + x 3 + x 2 + x + 1 , Φ 6 ( x ) = x 2 − x + 1 , Φ 7 ( x ) = x 6 + x 5 + x 4 + x 3 + x 2 + x + 1 , Φ 8 ( x ) = x 4 + 1 , Φ 9 ( x ) = x 6 + x 3 + 1 , Φ 10 ( x ) = x 4 − x 3 + x 2 − x + 1. 一个有趣的事实是,虽然看起来这些分圆多项式的系数都只能是 0 0 ± 1 ± 1 𝑛 n Φ 1 0 5 ( 𝑥 ) Φ 105 ( x ) 𝑛 n 
利用上文的 Möbius 反演式,可以总结出如下性质来简化 Φ 𝑛 ( 𝑥 ) Φ n ( x ) 
性质  对于分圆多项式 Φ 𝑛 ( 𝑥 ) Φ n ( x ) 
 如果素数 𝑝   ∣ 𝑛 p ∣ n Φ 𝑝 𝑛 ( 𝑥 )   = Φ 𝑛 ( 𝑥 𝑝 ) Φ p n ( x ) = Φ n ( x p )  如果素数 𝑝   ⟂ 𝑛 p ⟂ n Φ 𝑝 𝑛 ( 𝑥 )   = Φ 𝑛 ( 𝑥 𝑝 ) Φ 𝑛 ( 𝑥 ) Φ p n ( x ) = Φ n ( x p ) Φ n ( x )  特别地,如果 𝑛 n Φ 2 𝑛 ( 𝑥 )   = Φ 𝑛 (   − 𝑥 ) Φ 2 n ( x ) = Φ n ( − x )  对于素数 𝑝 p Φ 𝑝 ( 𝑥 )   = 1   + 𝑥   + ⋯   + 𝑥 𝑝 − 1 Φ p ( x ) = 1 + x + ⋯ + x p − 1  特别地,Φ 2 𝑘 ( 𝑥 )   = 𝑥 2 𝑘 − 1   + 1 Φ 2 k ( x ) = x 2 k − 1 + 1  这些性质说明,对分圆多项式的计算,重点在于那些次数是无平方因子的奇数的情形。而对于这种情形,可以用性质二逐个添加素因子;每个素因子的加入,只需要做一次多项式除法。
分圆多项式还有很多其它的性质。
定理  设 Φ 𝑛 ( 𝑥 ) Φ n ( x ) 𝑛   > 1 n > 1 𝜑 ( 𝑛 ) φ ( n ) 
 多项式 Φ 𝑛 ( 𝑥 ) Φ n ( x ) 𝑗 j 𝜑 ( 𝑛 )   − 𝑗 φ ( n ) − j Φ 𝑛 ( 𝑥 )   = 𝑥 𝜑 ( 𝑛 ) Φ 𝑛 ( 1 / 𝑥 ) Φ n ( x ) = x φ ( n ) Φ n ( 1 / x )  多项式的 𝜑 ( 𝑛 )   − 1 φ ( n ) − 1 − 𝜇 ( 𝑛 ) − μ ( n )  如果 𝑛 n 𝑝 𝑘 p k Φ 𝑛 ( 1 )   = 𝑝 Φ n ( 1 ) = p Φ 𝑛 ( 1 )   = 1 Φ n ( 1 ) = 1  设 𝑏   > 1 b > 1 𝑝 p Φ 𝑛 ( 𝑏 ) Φ n ( b ) 𝑝   ∣ 𝑛 p ∣ n 𝑛 n ( 𝐙 / 𝑝 𝐙 ) × ( Z / p Z ) × 𝑏 b  证明  对于前三条性质,只需要利用 Möbius 反演即可。对于 1,直接考察 Φ 𝑛 ( 𝑥 ) Φ n ( x ) Φ 𝑑 ( 𝑥 )   = ∏ 𝑑 ∣ 𝑛 ( 𝑥 𝑑   − 1 ) 𝜇 ( 𝑛 / 𝑑 ) Φ d ( x ) = ∏ d ∣ n ( x d − 1 ) μ ( n / d ) Φ 𝑛 ( 𝑥 ) Φ n ( x ) 𝜑 ( 𝑛 )   − 1 φ ( n ) − 1 𝑓 ( 𝑛 ) f ( n ) 𝑥 𝑛   − 1   = ∏ 𝑑 ∣ 𝑛 Φ 𝑑 ( 𝑥 ) x n − 1 = ∏ d ∣ n Φ d ( x ) 𝑛   − 1 n − 1 ∑ 𝑑 ∣ 𝑛 𝑓 ( 𝑑 )   =   − [ 𝑛   = 1 ] ∑ d ∣ n f ( d ) = − [ n = 1 ] 𝑥 𝑛   − 1   = ∏ 𝑑 ∣ 𝑛 Φ 𝑛 ( 𝑥 ) x n − 1 = ∏ d ∣ n Φ n ( x ) Φ 1 ( 𝑥 )   = 𝑥   − 1 Φ 1 ( x ) = x − 1 𝑥   = 1 x = 1 𝑛   = ∏ 𝑑 ∣ 𝑛 , 𝑑 ≠ 1 Φ 𝑛 ( 1 ) n = ∏ d ∣ n , d ≠ 1 Φ n ( 1 ) 
 下面证明第四条性质。首先,如果 𝑛 n ( 𝐙 / 𝑝 𝐙 ) × ( Z / p Z ) × 𝑏 b 𝑛 n 𝑝   ∣ 𝑏 𝑛   − 1 p ∣ b n − 1 𝑝   ∣ Φ 𝑛 ( 𝑏 ) p ∣ Φ n ( b ) 𝑝   ∣ Φ 𝑛 ( 𝑏 ) p ∣ Φ n ( b ) 𝑏 𝑛   ≡ 1 ( m o d 𝑝 ) b n ≡ 1 ( mod p ) 𝑛 n ( 𝐙 / 𝑝 𝐙 ) × ( Z / p Z ) × 𝑏 b 𝑘 k 𝑘   ∣ 𝑛 k ∣ n 𝑝   ∣ Φ 𝑘 ( 𝑏 ) p ∣ Φ k ( b ) Φ 𝑘 ( 𝑥 ) Φ k ( x ) Φ 𝑛 ( 𝑥 ) Φ n ( x ) 𝐅 𝑝 F p 𝑏 b 𝑥 𝑛   − 1 x n − 1 𝑏 b 𝑝   ∣ 𝑛 p ∣ n 𝑥 𝑛   − 1 x n − 1 𝐅 𝑝 F p Φ 𝑛 ( 𝑏 ) Φ n ( b ) 𝑝 p 𝑝   ∣ 𝑛 p ∣ n 𝑛 n ( 𝐙 / 𝑝 𝐙 ) × ( Z / p Z ) × 𝑏 b 𝑛   ∣ 𝑝   − 1 n ∣ p − 1 
分圆多项式还可以用于解决一些数论和代数问题。比如说分数在写成某个进制下的小数时的循环节长度,就和分圆多项式有密切的联系。对于这些具体的应用,有兴趣的读者可以参考文末的资料。
有限域 有限域 (finite field),也称作 Galois 域 (Galois field),就是只有有限多个元素的域。有限域的结构由其元素个数唯一确定,且它的元素个数必然是素数的幂。
定理  大小为 𝑞 q 𝑞 q 𝑝 𝑛 p n 𝐅 𝑞 F q 𝑝 p 𝐅 𝑞 F q 𝑛 n 𝐅 𝑞 / 𝐅 𝑝 F q / F p 𝐅 𝑞 F q 𝐅 𝑝 F p 𝑥 𝑞   − 𝑥 x q − x 𝑥 𝑞   − 𝑥 x q − x 𝑞 q 
证明  设域 𝐹 F 𝐹 F 𝑝 p 𝐹 F 𝐅 𝑝 F p 𝐹 F 𝐅 𝑝 F p 𝑛 n 𝐅 𝑝 F p 𝑛 n 𝐹 F 𝑞   = 𝑝 𝑛 q = p n 𝐹 F 𝐹 × F × 𝑞   − 1 q − 1 𝑥 𝑞 − 1   = 1 x q − 1 = 1 𝐹   = 𝐹 ×   ∪ { 0 } F = F × ∪ { 0 } 𝑥 𝑞   = 𝑥 x q = x 𝑥 𝑞   − 𝑥 x q − x 𝑞 q 𝐹 F 𝑥 𝑞   − 𝑥 x q − x ∏ 𝛼 ∈ 𝐹 ( 𝑥   − 𝛼 ) ∏ α ∈ F ( x − α ) 𝑞 q 1 1 𝑥 𝑞   − 𝑥   = ∏ 𝛼 ∈ 𝐹 ( 𝑥   − 𝛼 ) x q − x = ∏ α ∈ F ( x − α ) 𝑥 𝑞   − 𝑥 x q − x 𝐹 F 𝑥 𝑞   − 𝑥 x q − x 𝑥 𝑞   − 𝑥 x q − x 𝑞 q 𝑞 q 𝐹 F 𝑥 𝑞   − 𝑥 x q − x 𝑥 𝑞   − 𝑥 x q − x 𝑞 q 𝑥 𝑞   − 𝑥 x q − x 𝑞 q 
 反过来,给定素数 𝑝 p 𝑞   = 𝑝 𝑛 q = p n 𝐅 𝑝 F p 𝑥 𝑞   − 𝑥 x q − x 𝑞 q 𝑞 q 𝐅 𝑝 F p 𝑥 𝑞   − 𝑥 x q − x 𝑥 𝑞   − 𝑥 x q − x 𝐹 F 𝐹 F 𝑥 𝑞   − 𝑥 x q − x 𝑛 n 𝑥   ↦ 𝑥 𝑞 x ↦ x q 𝛼 , 𝛽   ∈ 𝐹 α , β ∈ F ( 𝛼   ± 𝛽 ) 𝑞   = 𝛼 𝑞   ± 𝛽 𝑞 ( α ± β ) q = α q ± β q ( 𝛼 𝛽 ) 𝑞   = 𝛼 𝑞 𝛽 𝑞 ( α β ) q = α q β q ( 𝛼 − 1 ) 𝑞   = ( 𝛼 𝑞 ) − 1 ( α − 1 ) q = ( α q ) − 1 𝐹 F 𝐹 F 𝐅 𝑝 F p 𝑥 𝑞   − 𝑥 x q − x 
推论  有限域 𝐅 𝑞 F q 𝑞   > 2 q > 2 0 0 − 1 − 1 
证明  有限域的全体非零元恰好是多项式 𝑥 𝑞 − 1   − 1 x q − 1 − 1 𝑞   − 1 q − 1 
在素域 𝐅 𝑝 F p Wilson 定理 (的一部分)。
乘法结构 有限域的乘法群 𝐅 ×   = 𝐅   ∖ { 0 } F × = F ∖ { 0 } 
定理  域 𝐹 F 
证明  设 𝐺 G 𝐹 F | 𝐺 |   = 𝑛 | G | = n 𝐺 G 𝐺 G 𝐶 𝑛 1   × ⋯   × 𝐶 𝑛 𝑠 C n 1 × ⋯ × C n s 𝑛 1   ∣ ⋯   ∣ 𝑛 𝑠 n 1 ∣ ⋯ ∣ n s 𝐺 G 𝑥 x 𝑥 𝑛 𝑠   = 1 x n s = 1 𝐺 G 𝐹 F 𝑥 𝑛 𝑠   − 1 x n s − 1 𝑥 𝑛 𝑠   − 1 x n s − 1 𝑛 𝑠 n s 𝑛   ≤ 𝑛 𝑠 n ≤ n s 𝑛 𝑠   ≤ 𝑛 n s ≤ n 𝑛 𝑠   = 𝑛 n s = n 𝐺   ≅ 𝐶 𝑛 𝑠 G ≅ C n s 𝐺 G 
推论  有限域 𝐅 𝑞 F q 𝐅 × 𝑞   ≅ 𝐶 𝑞 − 1 F q × ≅ C q − 1 
循环群 𝐅 × 𝑞 F q × 𝜑 ( 𝑞   − 1 ) φ ( q − 1 ) 𝜑 ( 𝑛 ) φ ( n ) 欧拉函数 。
本原元  有限域 𝐅 𝑞 F q 𝐅 𝑞 F q 本原元 (primitive element)。
单扩张中的本原元和有限域中的本原元并不相同  尽管单扩张中的本原元和有限域中的本原元的名称一致,两者并不相同。单扩张中的本原元是相应的单扩张的生成元,而有限域中的本原元是相应的乘法群(作为循环群)的生成元。有限域作为它的素子域的单扩张的本原元,未必是有限域本身的本原元。例如,𝐅 2 5   ≅ 𝐅 5 [ 𝑥 ] / ( 𝑥 2   + 𝑥   + 1 ) F 25 ≅ F 5 [ x ] / ( x 2 + x + 1 ) ―― 𝑥 x ― 𝐅 2 5 F 25 3 3 
𝐅 𝑞 F q 𝑞 q 对于奇数特征的有限域 𝐅 𝑞 F q 𝑞 q 原根 (primitive root)。但是,不应将它与有限域 𝐅 𝑞 F q ( 𝐙 / 𝑞 𝐙 ) × ( Z / q Z ) × 𝐅 𝑞 F q 𝑞 q 𝜑 ( 𝑞 ) φ ( q ) 𝑞   − 1 q − 1 
设 𝛼 α 𝐅 𝑞 F q 𝑥   ∈ 𝐅 𝑞 x ∈ F q 𝑘   < 𝑞   − 1 k < q − 1 𝑥   = 𝛼 𝑘 x = α k 𝑘 k 𝐅 𝑞 F q 𝑥 x 𝛼 α 离散对数 (discrete logarithm)。和 𝐅 𝑝 F p 离散对数的算法  的复杂度都比较高。
通过乘法运算,本原元已经可以生成域的全体非零元素。这说明,有限域作为它的子域的扩张,一定是单扩张。
定理  对于有限域 𝐅 𝑞 F q 𝐹 F 𝐅 𝑞 F q 𝐅 𝑞 F q 𝐹 F 𝛼 α 𝐅 𝑞 F q 𝐅 𝑞   = 𝐹 ( 𝛼 ) F q = F ( α ) 
本原元的极小多项式是有限域的子域上的不可约多项式。
包含关系 有限域的子域也是有限域。有限域之间的包含关系,也完全由它们的阶决定。
定理  设 𝐅 𝑞 F q 𝐅 𝑟 F r 𝐅 𝑟 F r 𝐅 𝑞 F q 𝑘 k 𝑞   = 𝑟 𝑘 q = r k 𝐅 𝑝 𝑑 F p d 𝐅 𝑝 𝑛 F p n 𝑑   ∣ 𝑛 d ∣ n 
证明  如果 𝐅 𝑟 F r 𝐅 𝑞 F q 𝑝 p 𝐅 𝑞 / 𝐅 𝑟 F q / F r 𝐅 𝑟 / 𝐅 𝑝 F r / F p 𝐅 𝑞 / 𝐅 𝑝 F q / F p 𝑘 , 𝑑 , 𝑛 k , d , n 𝑛   = 𝑘 𝑑 n = k d 𝑟   = 𝑝 𝑑 r = p d 𝑞   = 𝑝 𝑛 q = p n 𝑞   = 𝑝 𝑛   = 𝑝 𝑘 𝑑   = ( 𝑝 𝑑 ) 𝑘   = 𝑟 𝑘 q = p n = p k d = ( p d ) k = r k 
 反过来,要证明对于所有 𝑑   ∣ 𝑛 d ∣ n 𝐅 𝑝 𝑑 F p d 𝐅 𝑝 𝑛 F p n 𝑟   = 𝑝 𝑑 r = p d 𝑞   = 𝑝 𝑛 q = p n 𝐹 F 𝐅 𝑞 F q 𝑥 𝑟   − 𝑥   = 0 x r − x = 0 𝐹 F 𝑟 r 𝐹   ≅ 𝐅 𝑟 F ≅ F r 𝑑   ∣ 𝑛 d ∣ n ( 𝑝 𝑑   − 1 )   ∣ ( 𝑝 𝑛   − 1 ) ( p d − 1 ) ∣ ( p n − 1 ) ( 𝑥 𝑝 𝑑 − 1   − 1 )   ∣ ( 𝑥 𝑝 𝑛 − 1   − 1 ) ( x p d − 1 − 1 ) ∣ ( x p n − 1 − 1 ) ( 𝑥 𝑟   − 𝑥 )   ∣ ( 𝑥 𝑞   − 𝑥 ) ( x r − x ) ∣ ( x q − x ) 𝑥 𝑟   − 𝑥 x r − x 𝐅 𝑞 F q 𝐅 𝑞 F q 𝑟 r 𝐹   ≅ 𝐅 𝑟 F ≅ F r 𝐅 𝑞 F q 
这一定理说明,有限域 𝐅 𝑝 𝑛 F p n 𝑝 𝑛 p n 𝑛 n 𝑝 p 𝐅 𝑝 𝑛 F p n 𝑛 n 𝐅 𝑝 𝑛 F p n 𝑝 p 𝐅 𝑝 F p 
定理  设 𝐹 F 𝐅 𝑝 F p 𝐹 F 𝑥 𝑝 𝑛   − 𝑥 x p n − x 𝐅 𝑝 𝑛 F p n 
 𝐹   = ⋃ ∞ 𝑛 = 1 𝐅 𝑝 𝑛 F = ⋃ n = 1 ∞ F p n 𝐅 𝑝 F p 𝑝 p 全体特征为 𝑝 p 𝐅 𝑝 𝑛 F p n 𝑛 n 𝐅 𝑝 𝑛 F p n 𝐅 𝑝 𝑚 F p m 𝐅 𝑝 𝑛   ∩ 𝐅 𝑝 𝑚   = 𝐅 𝑝 g c d ( 𝑛 , 𝑚 ) F p n ∩ F p m = F p gcd ( n , m ) 𝐅 𝑝 𝑛 F p n 𝐅 𝑝 𝑚 F p m 𝐅 𝑝 𝑛 𝐅 𝑝 𝑚   = 𝐅 𝑝 l c m  ( 𝑛 , 𝑚 ) F p n F p m = F p lcm  ( n , m )  证明  关键在于证明第一部分,即 ⋃ ∞ 𝑛 = 1 𝐅 𝑝 𝑛 ⋃ n = 1 ∞ F p n 𝐹 𝑝 F p 
 注意到,任取 𝛼   ∈ ⋃ ∞ 𝑛 = 1 𝐅 𝑝 𝑛 α ∈ ⋃ n = 1 ∞ F p n 𝑛   ∈ 𝐍 + n ∈ N + 𝛼   ∈ 𝐅 𝑝 𝑛 α ∈ F p n 𝛼 α 𝐅 𝑝 F p ⋃ ∞ 𝑛 = 1 𝐅 𝑝 𝑛 ⋃ n = 1 ∞ F p n 𝐅 𝑝 F p 𝐅 𝑝 F p 𝑚 m 𝑓 ( 𝑥 ) f ( x ) 𝐹 F 𝑚 m { 𝛼 𝑖 } 𝑚 𝑖 = 1 { α i } i = 1 m 𝛼 𝑖 α i 𝑛 𝑖 n i 𝛼 𝑖 α i 𝐅 𝑝 𝑛 𝑖 F p n i 𝑓 ( 𝑥 ) f ( x ) 𝛼   ∈ ⋃ ∞ 𝑛 = 1 𝐅 𝑝 𝑛 α ∈ ⋃ n = 1 ∞ F p n 𝑓 ( 𝑥 ) f ( x ) 𝛼   ∈ ⋃ ∞ 𝑛 = 1 𝐅 𝑝 𝑛 α ∈ ⋃ n = 1 ∞ F p n 𝛼   ∈ ⋃ ∞ 𝑛 = 1 𝐅 𝑝 𝑛 α ∈ ⋃ n = 1 ∞ F p n 𝐅 𝑝 F p 
自同构群 有限域 𝐅 𝑞 F q 𝑥 𝑟   − 𝑥 x r − x 𝑥   ↦ 𝑥 𝑟 x ↦ x r 
特征为 𝑝 p 𝜎 𝑝   : 𝑥   ↦ 𝑥 𝑝 σ p : x ↦ x p 𝐅 𝑞 F q 𝐅 𝑞 F q 𝐅 𝑞 F q 𝑛 n ⟨ 𝜎 𝑝 ⟩ ⟨ σ p ⟩ 𝜎 𝑝 σ p 
定理  有限域 𝐅 𝑞 F q A u t  ( 𝐅 𝑞 )   = ⟨ 𝜎 𝑝 ⟩ Aut  ( F q ) = ⟨ σ p ⟩ 𝑛 n 𝜎 𝑝 σ p 𝑥   ↦ 𝑥 𝑝 x ↦ x p 
证明  首先,Frobenius 自同态 𝜎 𝑝 σ p 𝐅 𝑞 F q 𝜎 𝑝   ∈ A u t  ( 𝐅 𝑞 ) σ p ∈ Aut  ( F q ) 
 然后,𝜎 𝑝 σ p 𝑛 n 𝑥   ∈ 𝐅 𝑞 x ∈ F q 𝜎 𝑛 𝑝 ( 𝑥 )   = 𝑥 𝑝 𝑛   = 𝑥 σ p n ( x ) = x p n = x 𝑥 𝑝 𝑛 x p n 𝑘   < 𝑛 k < n 𝜎 𝑘 𝑝 σ p k 𝐅 𝑞 F q 𝑥 𝑝 𝑘   − 𝑥 x p k − x 
 最后,A u t  ( 𝐅 𝑞 ) Aut  ( F q ) 𝑛 n 𝛼 α 𝐅 𝑞 F q 𝜎   ∈ A u t  ( 𝐅 𝑞 ) σ ∈ Aut  ( F q ) 𝛼 α 𝜎 ( 𝛼 ) σ ( α ) 𝜎 σ 𝛼 α 𝛼 α 𝜎 ( 𝛼 ) σ ( α ) 𝑛 n A u t  ( 𝐅 𝑞 ) Aut  ( F q ) 𝑛 n 
 因此,A u t  ( 𝐅 𝑞 ) Aut  ( F q ) 𝑛 n ⟨ 𝜎 𝑝 ⟩ ⟨ σ p ⟩ 
自同构群 A u t  ( 𝐅 𝑞 ) Aut  ( F q ) 𝐅 𝑞 F q 
定理  设 𝐅 𝑞 F q F F G G A u t  ( 𝐅 𝑞 ) Aut  ( F q ) 
 对于 𝐹   ∈ F F ∈ F A u t  ( 𝐅 𝑞 / 𝐹 ) Aut  ( F q / F ) A u t  ( 𝐅 𝑞 ) Aut  ( F q ) 𝐹 F A u t  ( 𝐅 𝑞 / 𝐹 )   = { 𝜎   ∈ A u t  ( 𝐅 𝑞 )   : ∀ 𝑥   ∈ 𝐹 ( 𝜎 ( 𝑥 )   = 𝑥 ) } Aut  ( F q / F ) = { σ ∈ Aut  ( F q ) : ∀ x ∈ F ( σ ( x ) = x ) } A u t  ( 𝐅 𝑞 / 𝐹 )   ≤ A u t  ( 𝐅 𝑞 ) Aut  ( F q / F ) ≤ Aut  ( F q )  对于 𝐺   ∈ G G ∈ G 𝐹 𝐺 F G 𝐺 G 𝐹 𝐺   = { 𝑥   ∈ 𝐅 𝑞   : ∀ 𝜎   ∈ 𝐺 ( 𝜎 ( 𝑥 )   = 𝑥 ) } F G = { x ∈ F q : ∀ σ ∈ G ( σ ( x ) = x ) } 𝐹 𝐺 F G 𝐅 𝑞 F q  映射 𝐹   → A u t  ( 𝐅 𝑞 / 𝐹 ) F → Aut  ( F q / F ) 𝐺   → 𝐹 𝐺 G → F G F F G G  这个一一对应,将子域之间的扩张关系映射为子群之间的包含关系,即对于任何 𝐹 1   ⊆ 𝐹 2 F 1 ⊆ F 2 A u t  ( 𝐅 𝑞 / 𝐹 2 )   ≤ A u t  ( 𝐅 𝑞 / 𝐹 1 ) Aut  ( F q / F 2 ) ≤ Aut  ( F q / F 1 )  这个结论是一般的 Galois 理论的基本定理的特殊情形,它将域扩张和群论的内容联系起来,从而可以通过群论的方法解决域扩张的问题。
不可约多项式 有限域 𝐅 𝑞 F q 𝐅 𝑞 F q 𝑛 n 𝑛 n 𝑛 n 𝐅 𝑞 𝑛 F q n 𝐅 𝑞 F q 𝑛 n 𝑥 𝑞 𝑛   − 𝑥 x q n − x 𝐅 𝑞 F q 𝑛 n 𝑥 𝑞 𝑛   − 𝑥 x q n − x 𝐅 𝑞 F q 
有理数域 𝐅 𝑞 F q 𝑃 𝑛 P n 𝑛 n 
𝐅 𝑞 𝑛 = ⋃ 𝑑 ∣ 𝑛 𝑃 𝑑 . F q n = ⋃ d ∣ n P d . 这对应着因式分解
𝑥 𝑞 𝑛 − 𝑥 = ∏ 𝑑 | 𝑛 ∏ 𝜁 ∈ 𝑃 𝑑 ( 𝑥 − 𝜁 ) . x q n − x = ∏ d | n ∏ ζ ∈ P d ( x − ζ ) . 因为 𝑛 n 𝑛 n 𝑛 n 𝑛 n 
∏ 𝜁 ∈ 𝑃 𝑛 ( 𝑥 − 𝜁 ) = ∏ 𝑑 ∣ 𝑛 ( 𝑥 𝑞 𝑑 − 𝑥 ) 𝜇 ( 𝑛 / 𝑑 ) ∏ ζ ∈ P n ( x − ζ ) = ∏ d ∣ n ( x q d − x ) μ ( n / d ) 的因子;这个表达式是对前面的因式分解应用 Möbius 反演  得到的。因为这个多项式的次数是
∑ 𝑑 ∣ 𝑛 𝜇 ( 𝑑 ) 𝑞 𝑛 / 𝑑 , ∑ d ∣ n μ ( d ) q n / d , 所以,𝐅 𝑞 F q 𝑛 n 
1 𝑛 ∑ 𝑑 ∣ 𝑛 𝜇 ( 𝑑 ) 𝑞 𝑛 / 𝑑 1 n ∑ d ∣ n μ ( d ) q n / d 个。这恰为不计旋转意义下,𝑞 q 𝑛 n 证明 ),所以又称为项链多项式(necklace polynomial)。
定理  有限域 𝐅 𝑞 F q 
因为有限域上的不可约多项式有着简单的结构,这使得有限域上的多项式的因式分解十分容易。比如,要确定给定多项式的全体 𝑛 n 𝑥 𝑞 𝑛   − 𝑥 x q n − x 𝑛 n 𝑘   < 𝑛 k < n 𝑥 𝑞 𝑘   − 1 x q k − 1 𝑛 n 𝐅 𝑞 F q 
前文已经指出,有限域上的不可约多项式的根未必是相应扩域作为有限域的本原元。有限域 𝐅 𝑞 F q 𝐅 𝑝 F p 𝐅 𝑝 F p 本原多项式 ―― 𝑥 x ― 𝐅 𝑝 F p 𝑛 n 𝐅 𝑝 F p Φ 𝑛 ( 𝑥 ) Φ n ( x ) 
定理  设 𝑝 p 𝑛 n 𝑝   ⟂ 𝑛 p ⟂ n 𝑑 d ( 𝐙 / 𝑛 𝐙 ) × ( Z / n Z ) × 𝑝 p Φ 𝑛 ( 𝑥 ) Φ n ( x ) 𝐅 𝑝 F p 𝜑 ( 𝑛 ) 𝑑 φ ( n ) d 𝐅 𝑝 F p 𝑑 d Φ 𝑛 ( 𝑥 ) Φ n ( x ) 𝐅 𝑝 F p 𝑝 p 𝑛 n 
证明  如果注意到,𝑛 n 𝐅 𝑝 F p 𝑛 n 𝑛 n 𝑑 d ⟨ 𝜎 𝑝 ⟩ ⟨ σ p ⟩ 𝑑 d { 𝜁 𝑖   : 𝑖   ⟂ 𝑛 } { ζ i : i ⟂ n } 𝜁 𝑖   ↦ 𝜁 𝑖 𝑝 ζ i ↦ ζ i p ( 𝐙 / 𝑛 𝐙 ) × ( Z / n Z ) × 𝑝 p 𝑑 d ( 𝑥 𝑛   − 1 )   ∣ ( 𝑥 𝑝 𝑑 − 1   − 1 ) ( x n − 1 ) ∣ ( x p d − 1 − 1 ) 
虽然不可约多项式对于有限域的实现很重要,但是要找到有限域 𝐅 𝑞 F q 𝑛 n 𝑛 n Θ ( 1 / 𝑛 ) Θ ( 1 / n ) 𝑛 n Θ ( 𝑛 ) Θ ( n ) 
参考实现 本节提供一个朴素的有限域的实现,仅供参考。代码中实现了随机生成不可约多项式的方法。
参考实现    1 
  2 
  3 
  4 
  5 
  6 
  7 
  8 
  9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
 21 
 22 
 23 
 24 
 25 
 26 
 27 
 28 
 29 
 30 
 31 
 32 
 33 
 34 
 35 
 36 
 37 
 38 
 39 
 40 
 41 
 42 
 43 
 44 
 45 
 46 
 47 
 48 
 49 
 50 
 51 
 52 
 53 
 54 
 55 
 56 
 57 
 58 
 59 
 60 
 61 
 62 
 63 
 64 
 65 
 66 
 67 
 68 
 69 
 70 
 71 
 72 
 73 
 74 
 75 
 76 
 77 
 78 
 79 
 80 
 81 
 82 
 83 
 84 
 85 
 86 
 87 
 88 
 89 
 90 
 91 
 92 
 93 
 94 
 95 
 96 
 97 
 98 
 99 
100 
101 
102 
103 
104 
105 
106 
107 
108 
109 
110 
111 
112 
113 
114 
115 
116 
117 
118 
119 
120 
121 
122 
123 
124 
125 
126 
127 
128 
129 
130 
131 
132 
133 
134 
135 
136 
137 
138 
139 
140 
141 
142 
143 
144 
145 
146 
147 
148 
149 
150 
151 
152 
153 
154 
155 
156 
157 
158 
159 
160 
161 
162 
163 
164 
165 
166 
167 
168 
169 
170 
171 
172 
173 
174 
175 
176 
177 
178 
179 
180 
181 
182 
183 
184 
185 
186 
187 
188 
189 
190 
191 
192 
193 
194 
195 
196 
197 
198 
199 
200 
201 
202 
203 
204 
205 
206 
207 
208 
209 
210 
211 
212 
213 
214 
215 
216 
217 
218 
219 
220 
221 
222 
223 
224 
225 
226 
227 
228 
229 
230 
231 
232 
233 
234 
235 
236 
237 
238 
239 
240 
241 
242 
243 
244 
245 
246 
247 
248 
249 
250 
251 
252 
253 
254 
255 
256 
257 
258 
259 
260 
261 
262 
263 
264 
265 
266 
267 
268 
269 
270 
271 #include   <iostream> 
#include   <random> 
#include   <vector> 
class   FiniteField   { 
   int   p ,   k ; 
   std :: vector < int >   mod ;    // Monic. 
   // Remove leadings zeros of a polynomial. 
   static   void   trim ( std :: vector < int >&   poly )   { 
     int   m   =   poly . size (); 
     for   (;   m   &&   ! poly [ m   -   1 ];   -- m ); 
     poly . resize ( m ); 
   } 
   // Binary exponentiation mod p. 
   int   pow ( int   a ,   int   b )   const   { 
     int   res   =   1 ,   po   =   a ; 
     while   ( b )   { 
       if   ( b   &   1 )   res   =   ( long   long ) res   *   po   %   p ; 
       po   =   ( long   long ) po   *   po   %   p ; 
       b   >>=   1 ; 
     } 
     return   res ; 
   } 
   // Multiplicative inverse mod p. 
   int   inv ( int   a )   const   {   return   pow ( a ,   p   -   2 );   } 
   // Polynomial GCD. Inputs are supposed to have no leading zeros. 
   std :: vector < int >   poly_gcd ( const   std :: vector < int >&   lhs , 
                             const   std :: vector < int >&   rhs )   const   { 
     if   ( lhs . size ()   <   rhs . size ())   { 
       return   poly_gcd ( rhs ,   lhs ); 
     }   else   if   ( rhs . size ())   { 
       auto   rem   =   lhs ;    // remainder. 
       long   long   v   =   inv ( rhs . back ()); 
       for   ( int   i   =   rem . size ()   -   rhs . size ();   i   >=   0 ;   -- i )   { 
         auto   d   =   v   *   ( p   -   rem [ i   +   rhs . size ()   -   1 ])   %   p ; 
         for   ( int   j   =   0 ;   j   <   rhs . size ();   ++ j )   { 
           rem [ i   +   j ]   =   ( rem [ i   +   j ]   +   d   *   rhs [ j ])   %   p ; 
         } 
       } 
       trim ( rem );    // Remove leading zeros. 
       return   poly_gcd ( rhs ,   rem ); 
     }   else   { 
       return   lhs ; 
     } 
   } 
   // Polynomials Ex-GCD. Inputs are supposed to have no leading zeros. 
   void   poly_ex_gcd ( const   std :: vector < int >&   lhs ,   const   std :: vector < int >&   rhs , 
                    std :: vector < int >&   x ,   std :: vector < int >&   y )   const   { 
     if   ( lhs . size ()   <   rhs . size ())   { 
       poly_ex_gcd ( rhs ,   lhs ,   y ,   x ); 
     }   else   if   ( rhs . size ())   { 
       std :: vector < int >   quo ( lhs . size ()   -   rhs . size ()   +   1 );    // quotient. 
       auto   rem   =   lhs ;                                       // remainder. 
       long   long   v   =   inv ( rhs . back ()); 
       for   ( int   i   =   rem . size ()   -   rhs . size ();   i   >=   0 ;   -- i )   { 
         quo [ i ]   =   v   *   rem [ i   +   rhs . size ()   -   1 ]   %   p ; 
         long   long   d   =   p   -   quo [ i ];    // d = -quo[i]. 
         for   ( int   j   =   0 ;   j   <   rhs . size ();   ++ j )   { 
           rem [ i   +   j ]   =   ( rem [ i   +   j ]   +   d   *   rhs [ j ])   %   p ; 
         } 
       } 
       trim ( rem );    // Remove leading zeros. 
       // Recursively ex_gcd. 
       poly_ex_gcd ( rhs ,   rem ,   y ,   x ); 
       // y -= a/b*x. 
       if   ( y . size ()   <   quo . size ()   +   x . size ()   -   1 )   { 
         y . resize ( quo . size ()   +   x . size ()   -   1 ,   0 ); 
       } 
       for   ( int   i   =   0 ;   i   <   quo . size ();   ++ i )   { 
         for   ( int   j   =   0 ;   j   <   x . size ();   ++ j )   { 
           y [ i   +   j ]   =   ( y [ i   +   j ]   -   ( long   long ) quo [ i ]   *   x [ j ])   %   p ; 
           if   ( y [ i   +   j ]   <   0 )   y [ i   +   j ]   +=   p ; 
         } 
       } 
       trim ( y );    // Remove leading zeros. 
     }   else   { 
       // x = 1, y = 0. 
       x . assign ( 1 ,   inv ( lhs . back ())); 
       y . clear (); 
     } 
   } 
  public : 
   // Class for Finite Field Elements. 
   struct   Element   { 
     const   FiniteField *   gf ; 
     std :: vector < int >   a ; 
     // Element initialization as zero. 
     Element ( const   FiniteField *   gf )   :   gf ( gf ),   a ( gf -> k )   {} 
     // Element initialization from the numeric representation. 
     Element ( const   FiniteField *   gf ,   int   id )   :   gf ( gf ),   a ( gf -> k )   { 
       for   ( int   i   =   0 ;   i   <   gf -> k ;   ++ i )   { 
         a [ i ]   =   id   %   gf -> p ; 
         id   /=   gf -> p ; 
       } 
     } 
     // Generate the numeric representation from an element. 
     int   idx ()   const   { 
       int   id   =   0 ; 
       for   ( int   i   =   gf -> k   -   1 ;   i   >=   0 ;   -- i )   { 
         id   =   id   *   gf -> p   +   a [ i ]; 
       } 
       return   id ; 
     } 
     // Access the i-th coefficient. 
     int &   operator []( int   i )   {   return   a [ i ];   } 
     // Addition. 
     Element &   operator += ( const   Element &   rhs )   { 
       for   ( int   i   =   0 ;   i   <   gf -> k ;   ++ i )   { 
         a [ i ]   +=   rhs . a [ i ]; 
         if   ( a [ i ]   >=   gf -> p )   a [ i ]   -=   gf -> p ; 
       } 
       return   * this ; 
     } 
     // Addition. 
     Element   operator + ( const   Element &   rhs )   const   { 
       Element   res ( * this ); 
       res   +=   rhs ; 
       return   res ; 
     } 
     // Subtraction. 
     Element &   operator -= ( const   Element &   rhs )   { 
       for   ( int   i   =   0 ;   i   <   gf -> k ;   ++ i )   { 
         a [ i ]   -=   rhs . a [ i ]; 
         if   ( a [ i ]   <   0 )   a [ i ]   +=   gf -> p ; 
       } 
       return   * this ; 
     } 
     // Subtraction. 
     Element   operator - ( const   Element &   rhs )   const   { 
       Element   res ( * this ); 
       res   -=   rhs ; 
       return   res ; 
     } 
     // Multiplication by a scalar. 
     Element &   operator *= ( int   x )   { 
       for   ( int   i   =   0 ;   i   <   gf -> k ;   ++ i )   { 
         a [ i ]   =   ( long   long ) a [ i ]   *   x   %   gf -> p ; 
       } 
       return   * this ; 
     } 
     // Multiplication by a scalar. 
     Element   operator * ( int   x )   const   { 
       Element   res ( * this ); 
       res   *=   x ; 
       return   res ; 
     } 
     // Multiplication by x. 
     Element &   shift ()   { 
       long   long   d   =   gf -> p   -   a . back ();    // d = -a[k-1]. 
       for   ( int   i   =   gf -> k   -   1 ;   i   >=   0 ;   -- i )   { 
         a [ i ]   =   (( i   ?   a [ i   -   1 ]   :   0 )   +   d   *   gf -> mod [ i ])   %   gf -> p ; 
       } 
       return   * this ; 
     } 
     // Multiplication. 
     Element &   operator *= ( const   Element &   rhs )   { 
       Element   prod ( * this ); 
       * this   *=   rhs . a [ 0 ]; 
       for   ( int   j   =   1 ;   j   <   gf -> k ;   ++ j )   { 
         prod . shift (); 
         * this   +=   prod   *   rhs . a [ j ]; 
       } 
       return   * this ; 
     } 
     // Multiplication. 
     Element   operator * ( const   Element &   rhs )   const   { 
       Element   res ( * this ); 
       res   *=   rhs ; 
       return   res ; 
     } 
     // Binary exponentiation. 
     Element   pow ( int   b )   const   { 
       Element   res ( gf ,   1 ); 
       Element   po ( * this ); 
       while   ( b )   { 
         if   ( b   &   1 )   res   *=   po ; 
         po   =   po   *   po ; 
         b   >>=   1 ; 
       } 
       return   res ; 
     } 
     // Multiplicative inverse. 
     Element   inv ()   const   { 
       Element   res ( gf ); 
       auto &   x   =   res . a ; 
       std :: vector < int >   y ; 
       auto   lhs   =   a ; 
       trim ( lhs ); 
       auto   rhs   =   gf -> mod ; 
       gf -> poly_ex_gcd ( lhs ,   rhs ,   x ,   y ); 
       x . resize ( gf -> k ); 
       return   res ; 
     } 
     // Division. 
     Element &   operator /= ( const   Element &   rhs )   { 
       * this   *=   rhs . inv (); 
       return   * this ; 
     } 
     // Division. 
     Element   operator / ( const   Element &   rhs )   const   { 
       Element   res ( * this ); 
       res   /=   rhs ; 
       return   res ; 
     } 
   }; 
  private : 
   // Check whether the current MOD is irreducible. 
   bool   checkIrreducible ()   const   { 
     Element   f ( this ,   p ); 
     for   ( int   j   =   1 ;   j   <   k ;   ++ j )   { 
       // F = X^{p^j} mod MOD. 
       f   =   f . pow ( p ); 
       // G = X^{p^j}-X mod MOD. 
       auto   g   =   f . a ; 
       g [ 1 ]   =   g [ 1 ]   ?   g [ 1 ]   -   1   :   p   -   1 ; 
       trim ( g ); 
       // H = MOD. 
       auto   h   =   mod ; 
       // Reducible if deg(GCD(G,H))>0. 
       if   ( poly_gcd ( h ,   g ). size ()   >   1 )   return   false ; 
     } 
     return   true ; 
   } 
  public : 
   FiniteField ( int   p ,   int   k )   :   p ( p ),   k ( k ),   mod ( k   +   1 ,   1 )   { 
     do   {    // Randomly generate a polynomial. 
       for   ( int   i   =   0 ;   i   <   k ;   ++ i )   { 
         mod [ i ]   =   rand ()   %   p ; 
       } 
     }   while   ( ! checkIrreducible ()); 
   } 
}; 
int   main ()   { 
   int   p   =   13331 ,   k   =   50 ; 
   FiniteField   gf ( p ,   k ); 
   FiniteField :: Element   e1 ( & gf ,   rand ()   +   1 ); 
   FiniteField :: Element   e2 ( & gf ,   rand ()   +   1 ); 
   FiniteField :: Element   e3 ( & gf ,   rand ()   +   1 ); 
   // Test Frobenius endomorphism. 
   std :: cout 
       <<   (( e1   *   e2   +   e3 ). pow ( p )   -   e1 . pow ( p )   *   e2 . pow ( p )   -   e3 . pow ( p )). idx (); 
   // Test inverse. 
   std :: cout   <<   (( e1   *   e2 ). inv ()   -   e1 . inv ()   /   e2 ). idx (); 
   return   0 ; 
} 
密码学上用的最多的是特征为 2 2 
应用 本节列举一些域扩张在算法竞赛中的应用。最主要的情形,就是在对域上的算术表达式进行计算时,需要在中间过程引入一些原本的域中并不存在的元素,从而使得直接的计算成为可能。读者应当熟悉利用复数解决实数问题的情形,这就是实数域上的扩张的例子;读者相对陌生的,可能是有限域上的扩张。所以,这里主要讨论有限域上的扩张,尤其是素域 𝐅 𝑝 F p 
有些情形下,域扩张可以降低计算的复杂度,故而是必要的,例如实数域上的 快速傅里叶变换 ;有些情形下,域扩张只是众多解决问题方法中的一种,且通常有类似复杂度的方法可以避免使用域扩张,例如马上要提到的对斐波那契数列的计算。读者在理解这些应用的同时,应当比较不同方法的优劣,从而能够在解决问题时选择合适的方法。
斐波那契数列 对于 斐波那契数列  的计算,常见方法有 𝑂 ( 𝑛 ) O ( n ) 𝑂 ( l o g  𝑛 ) O ( log  n ) 𝑂 ( l o g  𝑛 ) O ( log  n ) 
𝑓 ( 𝑛 ) = 1 √ 5 ( ( 1 + √ 5 2 ) 𝑛 − ( 1 − √ 5 2 ) 𝑛 ) . f ( n ) = 1 5 ( ( 1 + 5 2 ) n − ( 1 − 5 2 ) n ) . 现在要计算 𝑓 ( 𝑛 ) f ( n ) 𝑝   ≠ 5 p ≠ 5 𝐅 𝑝 F p √ 5 5 𝐅 𝑝 F p 5 5 𝐅 𝑝 F p 5 5 5 5 𝑝 p 𝐅 𝑝 ( √ 5 )   ≅ 𝐅 𝑝 [ 𝑥 ] / ( 𝑥 2   − 5 ) F p ( 5 ) ≅ F p [ x ] / ( x 2 − 5 ) 
当然,在扩域中进行计算的时候,没有必要一定加入 √ 5 5 𝜙 ϕ 𝑥 2   − 𝑥   − 1 x 2 − x − 1 𝑓 ( 𝑛 ) f ( n ) 
𝑓 ( 𝑛 ) = 𝜙 𝑛 − ( − 𝜙 ) − 𝑛 2 𝜙 − 1 = 𝜙 𝑛 − ( 1 − 𝜙 ) 𝑛 2 𝜙 − 1 . f ( n ) = ϕ n − ( − ϕ ) − n 2 ϕ − 1 = ϕ n − ( 1 − ϕ ) n 2 ϕ − 1 . 如果 5 5 𝑝 p 𝑥 2   − 𝑥   − 1 x 2 − x − 1 𝐅 𝑝 ( 𝜃 )   ≅ 𝐅 𝑝 [ 𝑥 ] / ( 𝑥 2   − 𝑥   − 1 ) F p ( θ ) ≅ F p [ x ] / ( x 2 − x − 1 ) 
计算斐波那契数列的方法当然可以推广到别的情形。但是,有一点应当注意:有限域上多项式的不可约性和有理数域并不一致。譬如 𝑥 4   − 1 0 𝑥 2   + 1 x 4 − 10 x 2 + 1 𝐐 Q 𝐐 ( √ 2   + √ 3 )   = 𝐐 ( √ 2 , √ 3 ) Q ( 2 + 3 ) = Q ( 2 , 3 ) 𝐅 𝑝 F p 2 2 3 3 𝑝 p 𝐅 𝑝 ( √ 2 ) F p ( 2 ) √ 3 3 
推广到环上的「扩张」 正如上一节所展示的那样,域的扩张有着各种各样的限制。对于斐波那契数列的计算,只用扩域的方法只能解决模数 𝑝 p 5 5 𝑝 p 代数扩张  一节中的论述表明,如果不要求在扩张后的结构中做除法运算,那么可以对环进行扩张𝑛 n 
设 𝑚 m 𝑓 ( 𝑛 ) f ( n ) 𝑛 n 𝑓 ( 𝑛 ) m o d 𝑚 f ( n ) mod m 𝐙 / 𝑚 𝐙 Z / m Z 𝑥 2   − 𝑥   − 1 x 2 − x − 1 𝐙 / 𝑚 𝐙 Z / m Z 5 5 √ 5 5 𝑚 m 
( 1 − 𝑥 ) 𝑛 − 𝑥 𝑛 m o d 𝑥 2 − 𝑥 − 1 ( 1 − x ) n − x n mod x 2 − x − 1 的常数项即可。比对上文中的通项公式,这个做法的合理性是显然的:这似乎就是在「扩张」( 𝐙 / 𝑚 𝐙 ) [ 𝑥 ] / ( 𝑥 2   − 𝑥   − 1 ) ( Z / m Z ) [ x ] / ( x 2 − x − 1 ) 
𝑓 ( 𝑛 ) = ( 1 − 𝜙 ) 𝑛 − 𝜙 𝑛 1 − 2 𝜙 f ( n ) = ( 1 − ϕ ) n − ϕ n 1 − 2 ϕ 的值,且 𝜙 ϕ 𝑥 2   − 𝑥   − 1 x 2 − x − 1 
虽然没有那么显然,但是这个做法也是合法的。注意到,在有理数域的扩张 𝐐 ( 𝜙 )   ≅ 𝐐 [ 𝑥 ] / ( 𝑥 2   − 𝑥   − 1 ) Q ( ϕ ) ≅ Q [ x ] / ( x 2 − x − 1 ) 𝐐 [ 𝑥 ] Q [ x ] 
( 1 − 𝑥 ) 𝑛 − 𝑥 𝑛 ≡ 𝑓 ( 𝑛 ) ( 1 − 2 𝑥 ) ( m o d 𝑥 2 − 𝑥 − 1 ) ( 1 − x ) n − x n ≡ f ( n ) ( 1 − 2 x ) ( mod x 2 − x − 1 ) 成立。这只涉及到整系数多项式,因而在 𝐙 [ 𝑥 ] Z [ x ] 𝑚 m ( 𝐙 / 𝑚 𝐙 ) [ 𝑥 ] ( Z / m Z ) [ x ] 𝑚 m 
一般的情况下,如果某个表达式可以在有理数域 𝐐 Q 𝐙 [ 𝑥 ] Z [ x ] 𝑚 m ( 𝐙 / 𝑚 𝐙 ) [ 𝑥 ] ( Z / m Z ) [ x ] 2 2 2 2 𝑚 m 𝑓 ( 𝑛 ) f ( n ) (   − 𝜙 ) − 𝑛 ( − ϕ ) − n 
Cipolla 算法 这是利用有限域的扩域进行计算的典型例子。对于模 𝑝   ≠ 2 p ≠ 2 𝑎 a 𝑥 2   ≡ 𝑎 ( m o d 𝑝 ) x 2 ≡ a ( mod p ) 𝑥 x 𝐅 𝑝 F p Cipolla 算法  在有限域 𝐅 𝑝 2 F p 2 
具体来说,Cipolla 算法首先选择 𝑟 r 𝑟 2   − 𝑎 r 2 − a 𝑝 p 𝑥 2   − ( 𝑟 2   − 𝑎 ) x 2 − ( r 2 − a ) 𝑢   = 𝑟 2   − 𝑎 u = r 2 − a 𝐅 𝑝 ( √ 𝑢 ) F p ( u ) ( 𝑟   − √ 𝑢 ) 𝑝   = 𝑟   + √ 𝑢 ( r − u ) p = r + u ( 𝑟   − √ 𝑢 ) 𝑝 + 1   = ( 𝑟   + √ 𝑢 ) ( 𝑟   − √ 𝑢 )   = 𝑟 2   − 𝑢   = 𝑎 ( r − u ) p + 1 = ( r + u ) ( r − u ) = r 2 − u = a ( 𝑟   − √ 𝑢 ) ( 𝑝 + 1 ) / 2 ( r − u ) ( p + 1 ) / 2 𝐅 𝑝 F p 𝑥 2   − 𝑎 x 2 − a 𝐅 𝑝 F p 
习题 最后,列举一些直接应用本文内容的题目,以便加深理解。但应注意,很多内容并不是算法竞赛的常规考点。
参考资料与注释 2025/10/22 03:37:56 ,更新历史 在 GitHub 上编辑此页! c-forrest , HeRaNO , Tiphereth-A CC BY-SA 4.0  和 SATA