Package edu.jas.ufd

Class FactorAbstract<C extends GcdRingElem<C>>

java.lang.Object
edu.jas.ufd.FactorAbstract<C>
Type Parameters:
C - coefficient type
All Implemented Interfaces:
Factorization<C>, Serializable
Direct Known Subclasses:
FactorAbsolute, FactorInteger, FactorQuotient, FactorRealAlgebraic, FactorRealReal

public abstract class FactorAbstract<C extends GcdRingElem<C>> extends Object implements Factorization<C>
Abstract factorization algorithms class. This class contains implementations of all methods of the Factorization interface, except the method for factorization of a squarefree polynomial. The methods to obtain squarefree polynomials delegate the computation to the GreatestCommonDivisor classes and are included for convenience.
See Also:
  • Field Details

    • logger

      private static final org.apache.logging.log4j.Logger logger
    • debug

      private static final boolean debug
    • engine

      protected final GreatestCommonDivisorAbstract<C extends GcdRingElem<C>> engine
      Gcd engine for base coefficients.
    • sengine

      protected final SquarefreeAbstract<C extends GcdRingElem<C>> sengine
      Squarefree decompositon engine for base coefficients.
  • Constructor Details

    • FactorAbstract

      protected FactorAbstract()
      No argument constructor.
    • FactorAbstract

      public FactorAbstract(RingFactory<C> cfac)
      Constructor.
      Parameters:
      cfac - coefficient ring factory.
  • Method Details

    • toString

      public String toString()
      Get the String representation.
      Overrides:
      toString in class Object
      See Also:
    • isIrreducible

      public boolean isIrreducible(GenPolynomial<C> P)
      GenPolynomial test if is irreducible.
      Specified by:
      isIrreducible in interface Factorization<C extends GcdRingElem<C>>
      Parameters:
      P - GenPolynomial.
      Returns:
      true if P is irreducible, else false.
    • isReducible

      public boolean isReducible(GenPolynomial<C> P)
      GenPolynomial test if a non trivial factorization exists.
      Specified by:
      isReducible in interface Factorization<C extends GcdRingElem<C>>
      Parameters:
      P - GenPolynomial.
      Returns:
      true if P is reducible, else false.
    • isSquarefree

      public boolean isSquarefree(GenPolynomial<C> P)
      GenPolynomial test if is squarefree.
      Specified by:
      isSquarefree in interface Factorization<C extends GcdRingElem<C>>
      Parameters:
      P - GenPolynomial.
      Returns:
      true if P is squarefree, else false.
    • factorsSquarefreeOptimize

      public List<GenPolynomial<C>> factorsSquarefreeOptimize(GenPolynomial<C> P)
      GenPolynomial factorization of a multivariate squarefree polynomial, using Kronecker substitution and variable order optimization.
      Parameters:
      P - squarefree and primitive! (respectively monic) multivariate GenPolynomial over the ring C.
      Returns:
      [p_1,...,p_k] with P = prod_{i=1,...,r} p_i.
    • factorsSquarefree

      public List<GenPolynomial<C>> factorsSquarefree(GenPolynomial<C> P)
      GenPolynomial factorization of a squarefree polynomial, using Kronecker substitution.
      Specified by:
      factorsSquarefree in interface Factorization<C extends GcdRingElem<C>>
      Parameters:
      P - squarefree and primitive! (respectively monic) GenPolynomial.
      Returns:
      [p_1,...,p_k] with P = prod_{i=1,...,r} p_i.
    • factorsSquarefreeKronecker

      public List<GenPolynomial<C>> factorsSquarefreeKronecker(GenPolynomial<C> P)
      GenPolynomial factorization of a squarefree polynomial, using Kronecker substitution.
      Parameters:
      P - squarefree and primitive! (respectively monic) GenPolynomial.
      Returns:
      [p_1,...,p_k] with P = prod_{i=1,...,r} p_i.
    • removeOnce

      static <T> List<T> removeOnce(List<T> a, List<T> b)
      Remove one occurrence of elements.
      Parameters:
      a - list of objects.
      b - list of objects.
      Returns:
      remove every element of b from a, but only one occurrence. Note: not available in java.util.
    • baseFactorsRadical

      public List<GenPolynomial<C>> baseFactorsRadical(GenPolynomial<C> P)
      Univariate GenPolynomial factorization ignoring multiplicities.
      Parameters:
      P - GenPolynomial in one variable.
      Returns:
      [p_1, ..., p_k] with P = prod_{i=1,...,k} p_i**{e_i} for some e_i.
    • baseFactors

      public SortedMap<GenPolynomial<C>,Long> baseFactors(GenPolynomial<C> P)
      Univariate GenPolynomial factorization.
      Parameters:
      P - GenPolynomial in one variable.
      Returns:
      [p_1 -> e_1, ..., p_k -> e_k] with P = prod_{i=1,...,k} p_i**e_i.
    • baseFactorsSquarefree

      public abstract List<GenPolynomial<C>> baseFactorsSquarefree(GenPolynomial<C> P)
      Univariate GenPolynomial factorization of a squarefree polynomial.
      Parameters:
      P - squarefree and primitive! GenPolynomial in one variable.
      Returns:
      [p_1, ..., p_k] with P = prod_{i=1,...,k} p_i.
    • factorsRadical

      public List<GenPolynomial<C>> factorsRadical(GenPolynomial<C> P)
      GenPolynomial factorization ignoring multiplicities.
      Specified by:
      factorsRadical in interface Factorization<C extends GcdRingElem<C>>
      Parameters:
      P - GenPolynomial.
      Returns:
      [p_1, ..., p_k] with P = prod_{i=1,...,k} p_i**{e_i} for some e_i.
    • factorsRadical

      public List<GenPolynomial<C>> factorsRadical(List<GenPolynomial<C>> L)
      GenPolynomial list factorization ignoring multiplicities.
      Parameters:
      L - list of GenPolynomials.
      Returns:
      [p_1, ..., p_k] with p = prod_{i=1,...,k} p_i**{e_i} for some e_i for all p in L.
    • factors

      public SortedMap<GenPolynomial<C>,Long> factors(GenPolynomial<C> P)
      GenPolynomial factorization.
      Specified by:
      factors in interface Factorization<C extends GcdRingElem<C>>
      Parameters:
      P - GenPolynomial.
      Returns:
      [p_1 -> e_1, ..., p_k -> e_k] with P = prod_{i=1,...,k} p_i**e_i.
    • squarefreePart

      public GenPolynomial<C> squarefreePart(GenPolynomial<C> P)
      GenPolynomial greatest squarefree divisor. Delegates computation to a GreatestCommonDivisor class.
      Specified by:
      squarefreePart in interface Factorization<C extends GcdRingElem<C>>
      Parameters:
      P - GenPolynomial.
      Returns:
      squarefree(P).
    • primitivePart

      public GenPolynomial<C> primitivePart(GenPolynomial<C> P)
      GenPolynomial primitive part. Delegates computation to a GreatestCommonDivisor class.
      Parameters:
      P - GenPolynomial.
      Returns:
      primitivePart(P).
    • basePrimitivePart

      public GenPolynomial<C> basePrimitivePart(GenPolynomial<C> P)
      GenPolynomial base primitive part. Delegates computation to a GreatestCommonDivisor class.
      Parameters:
      P - GenPolynomial.
      Returns:
      basePrimitivePart(P).
    • squarefreeFactors

      public SortedMap<GenPolynomial<C>,Long> squarefreeFactors(GenPolynomial<C> P)
      GenPolynomial squarefree factorization. Delegates computation to a GreatestCommonDivisor class.
      Specified by:
      squarefreeFactors in interface Factorization<C extends GcdRingElem<C>>
      Parameters:
      P - GenPolynomial.
      Returns:
      [p_1 -> e_1, ..., p_k -> e_k] with P = prod_{i=1,...,k} p_i**e_i.
    • isFactorization

      public boolean isFactorization(GenPolynomial<C> P, List<GenPolynomial<C>> F)
      GenPolynomial is factorization.
      Specified by:
      isFactorization in interface Factorization<C extends GcdRingElem<C>>
      Parameters:
      P - GenPolynomial.
      F - = [p_1,...,p_k].
      Returns:
      true if P = prod_{i=1,...,r} p_i, else false.
    • isFactorization

      public boolean isFactorization(GenPolynomial<C> P, SortedMap<GenPolynomial<C>,Long> F)
      GenPolynomial is factorization.
      Specified by:
      isFactorization in interface Factorization<C extends GcdRingElem<C>>
      Parameters:
      P - GenPolynomial.
      F - = [p_1 -> e_1, ..., p_k -> e_k].
      Returns:
      true if P = prod_{i=1,...,k} p_i**e_i , else false.
    • factorsDegree

      public long factorsDegree(SortedMap<GenPolynomial<C>,Long> F)
      Degree of a factorization.
      Parameters:
      F - a factors map [p_1 -> e_1, ..., p_k -> e_k].
      Returns:
      sum_{i=1,...,k} degree(p_i)*e_i.
    • isRecursiveFactorization

      public boolean isRecursiveFactorization(GenPolynomial<GenPolynomial<C>> P, SortedMap<GenPolynomial<GenPolynomial<C>>,Long> F)
      GenPolynomial is factorization.
      Parameters:
      P - GenPolynomial.
      F - = [p_1 -> e_1, ..., p_k -> e_k].
      Returns:
      true if P = prod_{i=1,...,k} p_i**e_i , else false.
    • recursiveFactorsSquarefree

      public List<GenPolynomial<GenPolynomial<C>>> recursiveFactorsSquarefree(GenPolynomial<GenPolynomial<C>> P)
      Recursive GenPolynomial factorization of a squarefree polynomial.
      Parameters:
      P - squarefree recursive GenPolynomial.
      Returns:
      [p_1,...,p_k] with P = prod_{i=1, ..., k} p_i.
    • recursiveFactors

      Recursive GenPolynomial factorization.
      Parameters:
      P - recursive GenPolynomial.
      Returns:
      [p_1 -> e_1, ..., p_k -> e_k] with P = prod_{i=1,...,k} p_i**e_i.
    • normalizeFactorization

      public List<GenPolynomial<C>> normalizeFactorization(List<GenPolynomial<C>> F)
      Normalize factorization. p'_i > 0 for i > 1 and p'_1 != 1 if k > 1.
      Parameters:
      F - = [p_1,...,p_k].
      Returns:
      F' = [p'_1,...,p'_k].