DistinctDegreeFactorize(F, FP)¶
ddfact.spad line 1 [edit on github]
Package for the factorization of a univariate polynomial with coefficients in a finite field. The algorithm used is the “distinct degree” algorithm of Cantor-Zassenhaus, modified to use trace instead of the norm and a table for computing Frobenius as suggested by Naudin and Quitte .
- distdfact: (FP, Boolean) -> Record(cont: F, factors: List Record(irr: FP, pow: NonNegativeInteger))
distdfact(p, sqfrflag)
produces the complete factorization of the polynomialp
returning an internal data structure. If argument sqfrflag istrue
, the polynomial is assumed square free.
- exptMod: (FP, NonNegativeInteger, FP) -> FP
exptMod(u, k, v)
raises the polynomialu
to thek
th power modulo the polynomialv
.
- factor: FP -> Factored FP
factor(p)
produces the complete factorization of the polynomialp
.
- factorSquareFree: FP -> Factored FP
factorSquareFree(p)
produces the complete factorization of the square free polynomialp
.
- irreducible?: FP -> Boolean
irreducible?(p)
tests whether the polynomialp
is irreducible.
- separateDegrees: FP -> List Record(deg: NonNegativeInteger, prod: FP)
separateDegrees(p)
splits the square free polynomialp
into factors each of which is a product of irreducibles of the same degree.
- separateFactors: List Record(deg: NonNegativeInteger, prod: FP) -> List FP
separateFactors(lfact)
takes the list produced by separateDegrees and produces the complete list of factors.
- trace2PowMod: (FP, NonNegativeInteger, FP) -> FP
trace2PowMod(u, k, v)
produces the sum ofu^(2^i)
fori
running from 1 tok
all computed modulo the polynomialv
.
- tracePowMod: (FP, NonNegativeInteger, FP) -> FP
tracePowMod(u, k, v)
produces the sum ofu^(q^i)
fori
running andq=
sizeF