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 polynomialpreturning 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 polynomialuto thekth 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 polynomialpis irreducible.
- separateDegrees: FP -> List Record(deg: NonNegativeInteger, prod: FP)
separateDegrees(p)splits the square free polynomialpinto 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)forirunning from 1 tokall computed modulo the polynomialv.
- tracePowMod: (FP, NonNegativeInteger, FP) -> FP
tracePowMod(u, k, v)produces the sum ofu^(q^i)forirunning andq=sizeF