Factorización de polinomios sobre corpos finitos

En matemáticas e álxebra informática a factorización dun polinomio consiste en descompoñelo nun produto de factores irredutíbeis. Esta descomposición é teoricamente posíbel e é única para polinomios con coeficientes en calquera corpo, pero son necesarias restricións fortes no corpo dos coeficientes para permitir o cálculo da factorización por medio dun algoritmo. Na práctica, os algoritmos foron deseñados só para polinomios con coeficientes nun corpo finito, no corpo dos racionais ou nunha extensión dun corpo finitamente xerada dun deles.
Todos os algoritmos de factorización, incluído o caso de polinomios multivariados sobre os números racionais, reducen o problema a este caso; ver factorización polinómica. Tamén se usa para varias aplicacións de corpos finitos, como a teoría da codificación (códigos de redundancia cíclica e códigos BCH), a criptografía (criptografía de clave pública mediante curvas elípticas) e a teoría computacional de números.
Como a redución da factorización de polinomios multivariados á de polinomios univariados non ten ningunha especificidade no caso dos coeficientes nun corpo finito, neste artigo só se consideran polinomios cunha variábel. Fondo
Corpo finito
Un corpo finito ou corpo de Galois é un corpo cunha orde finita (número de elementos). A orde dun corpo finito é sempre un primo ou unha potencia de primo. Para cada potencia de primo q
pr, existe exactamente un corpo finito con q elementos, ata isomorfismo. Este corpo denomínase GF(q) ou Fq. Se p é primo, GF(p) é o corpo primo de orde p; é o corpo das clases de residuos módulo p, e os seus p elementos denotanse 0, 1, .. ., p -1. Así, a
b en GF(p) significa o mesmo que a ≡ b (mod p).
Polinomios irredutíbeis
Sexa F un corpo finito. En canto aos corpos xerais, dise que un polinomio f non constante en F[x] é irredutíbel sobre F se non é o produto de dous polinomios de grao positivo. Un polinomio de grao positivo que non é irredutíbel sobre F chámase reducíbel sobre F.
Exemplo
O polinomio P
x4 + 1 é irredutíbel sobre Q mais non sobre calquera corpo finito. En calquera extensión de corpo de F2, P
(x + 1)4 (ten eses catro factores e por tanto é reducíbel).
En calquera outro corpo finito, polo menos un de −1, 2 e −2 é un cadrado, porque o produto de dous non cadrados é un cadrado e así temos
Se − 1
a 2, {\displaystyle -1
a^{2}, } entón P
( x 2 + a ) ( x 2 − a ). {\displaystyle P
(x^{2}+a)(x^{2}-a). } Se 2
b 2, {\displaystyle 2
b^{2}, } entón P
( x 2 + b x + 1 ) ( x 2 − b x + 1 ). {\displaystyle P
(x^{2}+bx+1)(x^{2}-bx+1). } Se − 2
c 2, {\displaystyle -2
c^{2}, } entón P
( x 2 + c x − 1 ) ( x 2 − c x − 1 ). {\displaystyle P
(x^{2}+cx-1)(x^{2}-cx-1). }
Complexidade
Nos algoritmos que seguen, as complexidades exprésanse en termos de número de operacións aritméticas en Fq, utilizando algoritmos clásicos para a aritmética de polinomios. Algoritmos de factorización
Moitos algoritmos para factorizar polinomios sobre corpos finitos inclúen as seguintes tres etapas: Factorización libre de cadrados
Factorización de graos distintos
Factorización de igual grao
Unha excepción importante é o algoritmo de Berlekamp, que combina as etapas 2 e 3.
Factorización libre de cadrados
O algoritmo determina unha factorización sen cadrados para polinomios cuxos coeficientes proveñen do corpo finito Fq de orde q pm con p un primo. Este algoritmo determina primeiro a derivada e despois calcula o mcd do polinomio e a súa derivada. Se non é un, entón o mcd divíde de novo ao polinomio orixinal, sempre que a derivada non sexa cero (un caso que existe para polinomios non constantes definidos sobre corpos finitos).
Este algoritmo utiliza o feito de que, se a derivada dun polinomio é cero, entón é un polinomio en xp, que é, se os coeficientes pertencen a Fp, a p-ésima potencia do polinomio que se obtén substituíndo x por x1/ p. Se os coeficientes non pertencen a Fp, a raíz p-ésima dun polinomio de derivada cero obtense mediante a mesma substitución en x, completada aplicando aos coeficientes a inversa do automorfismo de Frobenius. Algoritmo: SFF (factorización libre de cadrados) Entrada: Un polinomio mónico f en Fq[x] onde q pm Saída: factorización sen cadrados de f R ← 1 # Fai que w sexa o produto (sen multiplicidade) de todos os factores de f que teñen # multiplicidade non divisíbel por p c ← mcd (f, f′) w ← f/c # Paso 1: Identifica todos os factores en w i ← 1 while w ≠ 1 do y ← mcd (w, c) fac ← w/y R ← R·faci w ← y; c ← c/y; i ← i + 1 end while # c é agora o produto (con multiplicidade) dos restantes factores de f # Paso 2: identifica todos os factores restantes mediante a recursividade # Teña en conta que estes son os factores de f que teñen multiplicidade divisíbel por p if c ≠ 1 then c ← c1/p R ← R·SFF(c)p end if Saída (R)
Exemplo de factorización sen cadrados
Temos que factorizar f
x 11 + 2 x 9 + 2 x 8 + x 6 + x 5 + 2 x 3 + 2 x 2 + 1 ∈ F 3 [ x ], {\displaystyle f
x^{11}+2x^{9}+2x^{8}+x^{6}+x^{5}+2x^{3}+2x^{2}+1\in \mathbf {F} _{3}[x], } sobre o corpo con tres elementos.
O algoritmo calcula primeiro c
gcd ( f, f ′ )
x 9 + 2 x 6 + x 3 + 2. {\displaystyle c
\gcd(f, f')
x^{9}+2x^{6}+x^{3}+2. } Dado que a derivada é distinta de cero, temos w
f/c
x2 + 2 e entramos no bucle while. Despois dun bucle temos y
x + 2, z
x + 1 e R
x + 1 con actualizacións i
2, w
x + 2 e c
x8 + x7 + x6 + x2+x+1. A segunda vez a través do bucle dá y
x + 2, z
1, R
x + 1, con actualizacións i
3, w
x + 2 e c
x7 + 2x6 + x + 2. A terceira vez a través do bucle tampouco non muda R. Por cuarta vez a través do bucle obtemos y
1, z
x + 2, R
(x + 1)(x + 2)4, con actualizacións i
5, w
1 e c
x6 + 1. Dado que w
1, saímos do bucle while. Dado que c ≠ 1, debe ser un cubo perfecto. A raíz cúbica de c, obtida ao substituír x3 por x é x2 + 1, e chamar recursivamente ao procedemento libre de cadrados determina que é libre de cadrados. Polo tanto, elevándoo ao cubo e combinándoo co valor de R ata ese punto dáse a descomposición sen cadrados. f
( x + 1 ) ( x 2 + 1 ) 3 ( x + 2 ) 4. {\displaystyle f (x+1)(x^{2}+1)^{3}(x+2)^{4}. }
Factorización de graos distintos
Este algoritmo separa un polinomio libre de cadrados nun produto de polinomios cuxos factores irredutíbeis teñen todos o mesmo grao. Sexa f ∈ Fq[x] de grao n o polinomio a factorizar. Algoritmo Factorización de graos distintos (DDF) Entrada: un polinomio mónico libre de cadrados f ∈ Fq[x] Saída: o conxunto de todos os pares (g, d), tal que f ten un factor irredutíbel de grao d e g é o produto de todos os factores irredutíbeis mónicos de f de grao d. Begin i:
1; S:
∅, f ∗:
f; {\displaystyle i:
1; \qquad S:
\emptyset, \qquad f^{*}:
f; } while deg ⁡ f ∗ ≥ 2 i {\displaystyle \deg f^{*}\geq 2i} do g
gcd ( f ∗, x q i − x ) {\displaystyle g
\gcd(f^{*}, x^{q^{i}}-x)} if g ≠ 1 then S:
S ∪ { ( g, i ) } {\displaystyle S:
S\cup \{(g, i)\}}; f ∗:
f ∗ / g {\displaystyle f^{*}:
f^{*}/g} end if i:
i + 1; end while; if f ∗ ≠ 1 {\displaystyle f^{*}\neq 1}, entón S:
S ∪ { ( f ∗, deg ⁡ f ∗ ) } {\displaystyle S:
S\cup \{(f^{*}, \deg f^{*})\}}; if S
∅ {\displaystyle S \emptyset }, entón devolve {(f, 1)}, else return S End
Factorización de igual grao
Algoritmo de Cantor-Zassenhaus
Nesta sección, consideramos a factorización dun polinomio univariado mónico libre de cadrados f, de grao n, sobre un corpo finito Fq, que ten r ≥ 2 factores irredutíbeis distintos por pares. f 1, …, f r {\displaystyle f_{1}, \ldots, f_{r}} cada un de grao d.
Describimos primeiro un algoritmo de Cantor e Zassenhaus (1981) e despois unha variante que ten unha complexidade lixeiramente mellor. Ambos os dous son algoritmos probabilísticos cuxo tempo de execución depende de opcións aleatorias ( algoritmos Las Vegas) e teñen un bo tempo medio de execución. Na seguinte sección describimos un algoritmo de Shoup (1990), que tamén é un algoritmo de factorización de igual grao, pero é determinista. Todos estes algoritmos requiren unha orde impar q para o corpo dos coeficientes. Para máis algoritmos de factorización consulte, por exemplo, o libro de Knuth The Art of Computer Programming, volume 2. Algoritmo Algoritmo Cantor–Zassenhaus. Entrada: un corpo finito Fq de orde impar q. Un polinomio libre de cadrados mónico f en Fq[x] de grao n
rd, que ten r ≥ 2 factores irredutíbeis cada un de grao d Saída: O conxunto de factores irredutíbeis mónicos de f. Factores:
{f}; while Tamaño(Factores) < r do, Escolle h en Fq[x] con deg( h ) < n ao chou; g:
h q d − 12 − 1 ( mod f ) {\displaystyle g:
h^{\frac {q^{d}-1}{2}}-1{\pmod {f}}} for each u in Factores con deg(u) > d do if mcd(g, u) ≠ 1 e mcd(g, u) ≠ u then Factores: Factorizar ∖ { u } ∪ { ( gcd ( g, u ), u / gcd ( g, u ) ) } {\displaystyle \, \setminus \, \{u\}\cup \{(\gcd(g, u), u/\gcd(g, u))\}}; endif endwhile return Factores Demostrouse que o número medio de iteracións do bucle while do algoritmo é menor que 2. 5 log 2 ⁡ r {\displaystyle 2. 5\log _{2}r}, dando un número medio de operacións aritméticas en Fq que é O ( d n 2 log ⁡ ( r ) log ⁡ ( q ) ) {\displaystyle O(dn^{2}\log(r)\log(q))}.
No caso típico onde d log( q ) > n, esta complexidade pódese reducir a O ( n 2 ( log ⁡ ( r ) log ⁡ ( q ) + n ) ) {\displaystyle O(n^{2}(\log(r)\log(q)+n))} escollendo h no kernel do mapa linear v → v q − v ( mod f ) {\displaystyle v\to v^{q}-v{\pmod {f}}} e substituíndo a instrución g:
h q d − 12 − 1 ( mod f ) {\displaystyle g:
h^{\frac {q^{d}-1}{2}}-1{\pmod {f}}} por g:
h q − 12 − 1 ( mod f ). {\displaystyle g:
h^{\frac {q-1}{2}}-1{\pmod {f}}. }
Algoritmo de Victor Shoup
Como os algoritmos da sección anterior, o algoritmo de Victor Shoup é un algoritmo de factorización de igual grao. A diferenza deles, é un algoritmo determinista. No entanto, é menos eficiente, na práctica, que os algoritmos da sección anterior. Para o algoritmo de Shoup, a entrada está restrinxida a polinomios sobre corpos primos Fp.
Sexa g
g1. .. gk a factorización desexada, onde os gi son polinomios mónicos irredutíbeis distintos de grao d. Sexa n
deg( g )
kd. Consideramos o anel R
Fq[x]/g e denotamos tamén por x a imaxe de x en R. O anel R é o produto directo dos corpos Ri
Fq [x]/gi, e denotamos por pi o homomorfismo natural de R en Ri. O grupo de Galois de Ri sobre Fq é cíclico de orde d, xerado polo automorfismo de corpos u → up. Dedúcese que as raíces de gi en Ri son p i ( x ), p i ( x q ), p i ( x q 2 ), …, p i ( x q d − 1 ). {\displaystyle p_{i}(x), p_{i}(x^{q}), p_{i}\left(x^{q^{2}}\right), \ldots, p_{i}\left(x^{q^{d-1}}\right). } Como no algoritmo anterior, este algoritmo usa a mesma subálxebra B de R que o algoritmo de Berlekamp, ás veces chamada "subálxebra de Berlekamp" e definida como B
{ α ∈ R: p 1 ( α ), ⋯, p k ( α ) ∈ F q }
{ u ∈ R: u q
u } {\displaystyle {\begin{aligned}B&
\left\{\alpha \in R\: \ p_{1}(\alpha ), \cdots, p_{k}(\alpha )\in \mathbf {F} _{q}\right\}\\&
\{u\in R\: \ u^{q}
u\}\end{aligned}}} Un subconxunto S de B dise conxunto separador se, para cada 1 ≤ i < j ≤ k existe s ∈ S tal que p i ( s ) ≠ p j ( s ) {\displaystyle p_{i}(s)\neq p_{j}(s)}. No algoritmo anterior, constrúese un conxunto separador escollendo ao azar os elementos de S. No algoritmo de Shoup, o conxunto separador constrúese do seguinte xeito. Sexa s en R [Y ] tal que s
( Y − x ) ( Y − x q ) ⋯ ( Y − x q d − 1 )
s 0 + ⋯ + s d − 1 Y d − 1 + Y d. {\displaystyle {\begin{aligned}s&
(Y-x)\left(Y-x^{q}\right)\cdots \left(Y-x^{q^{d-1}}\right)\\&
s_{0}+\cdots +s_{d-1}Y^{d-1}+Y^{d}\end{aligned}}. } Daquela { s 0, …, s d − 1 } {\displaystyle \{s_{0}, \dots, s_{d-1}\}} é un conxunto separador porque p i ( s )
g i {\displaystyle p_{i}(s)
g_{i}} para i
1, .. ., k (os dous polinomios mónicos teñen as mesmas raíces). Como os gi son distintos por pares, para cada par de índices distintos (i, j), polo menos un dos coeficientes sh satisfará p i ( s h ) ≠ p j ( s h ). {\displaystyle p_{i}(s_{h})\neq p_{j}(s_{h}). } Tendo un conxunto separador, o algoritmo de Shoup procede como o último algoritmo da sección anterior, simplemente substituíndo a instrución "escolle h aleatoriamente no kernel do mapa linear". v → v q − v ( mod f ) {\displaystyle v\to v^{q}-v{\pmod {f}}} " por "escolla h + i con h en S e i en {1, .. ., k −1}". Test de irredutibilidade de Rabin
Do mesmo xeito que o algoritmo de factorización de graos distintos, o algoritmo de Rabin baséase no lema indicado anteriormente. O algoritmo de factorización de graos distintos proba todo d non superior á metade do grao do polinomio de entrada. O algoritmo de Rabin aproveita que os factores non son necesarios para considerar menos d. En caso contrario, é semellante ao algoritmo de factorización de graos distintos. Baséase no seguinte feito.
Sexan p1, .. ., pk, todos os divisores primos de n, e denotamos n / p i
n i {\displaystyle n/p_{i}
n_{i}}, para 1 ≤ i ≤ k polinomio f en Fq[x] de grao n é irredutibel en Fq[x] se e só se gcd ( f, x q n i − x )
1 {\displaystyle \gcd \left(f, x^{q^{n_{i}}}-x\right)
1}, para 1 ≤ i ≤ k, e f divide x q n − x {\displaystyle x^{q^{n}}-x}. De feito, se f ten un factor de grao que non divide n, entón f non divide x q n − x {\displaystyle x^{q^{n}}-x}; se f ten un factor de grao que divide n, entón este factor divide polo menos un dos x q n i − x. {\displaystyle x^{q^{n_{i}}}-x. } Algoritmo test de Irredutibilidade de Rabin Entrada: un polinomio mónico f en Fq[x] de grao n, p1, .. ., pk todos os divisores primos distintos de n. Saída: "f é irredutíbel" ou " f é reducíbel". for j
1 to k do n j
n / p j {\displaystyle n_{j}
n/p_{j}}; for i
1 to k do h:
x q n i − x mod f {\displaystyle h:
x^{q^{n_{i}}}-x{\bmod {f}}}; g:
mcd( f, h ); if g ≠ 1 then return "f é reducíbel" e FIN; end for; g:
x q n − x mod f {\displaystyle g:
x^{q^{n}}-x{\bmod {f}}}; if g
0, then return "f é irredutíbel", else return "f é reducíbel" A idea básica deste algoritmo é calcular x q n i mod f {\displaystyle x^{q^{n_{i}}}{\bmod {f}}} comezando polo máis pequeno n 1, …, n k {\displaystyle n_{1}, \ldots, n_{k}} mediante o cadrado repetido ou usando o automorfismo de Frobenius, e despois tomar o mcd correspondente. Usando a aritmética polinómica elemental, o cálculo da matriz do automorfismo de Frobenius precisa O ( n 2 ( n + log ⁡ q ) ) {\displaystyle O(n^{2}(n+\log q))} operacións en Fq, o cálculo de x q n i − x ( mod f ) {\displaystyle x^{q^{n_{i}}}-x{\pmod {f}}} precisa O (n3) operacións adicionais, e o propio algoritmo precisa O (kn2) operacións, dando un total de O ( n 2 ( n + log ⁡ q ) ) {\displaystyle O(n^{2}(n+\log q))} operacións en Fq.