1 | /*****************************************************************************\ |
---|
2 | * Computer Algebra System SINGULAR |
---|
3 | \*****************************************************************************/ |
---|
4 | /** @file facAbsBiFact.h |
---|
5 | * |
---|
6 | * bivariate absolute factorization over Q described in "Modular Las Vegas |
---|
7 | * Algorithms for Polynomial Absolute Factorization" by Bertone, ChÚze, Galligo |
---|
8 | * |
---|
9 | * @author Martin Lee |
---|
10 | * |
---|
11 | **/ |
---|
12 | /*****************************************************************************/ |
---|
13 | |
---|
14 | #ifndef FAC_ABS_BI_FACT_H |
---|
15 | #define FAC_ABS_BI_FACT_H |
---|
16 | |
---|
17 | #include "canonicalform.h" |
---|
18 | |
---|
19 | #ifdef HAVE_NTL |
---|
20 | /// main absolute factorization routine, expects bivariate poly which is |
---|
21 | /// irreducible over Q |
---|
22 | /// |
---|
23 | /// @return absBiFactorizeMain returns a list whose entries contain three |
---|
24 | /// entities: |
---|
25 | /// an absolute irreducible factor, an irreducible univariate polynomial |
---|
26 | /// that defines the minimal field extension over which the irreducible |
---|
27 | /// factor is defined (note: in case the factor is already defined over |
---|
28 | /// Q[t]/(t), 1 is returned as defining poly), and the |
---|
29 | /// multiplicity of the absolute irreducible factor |
---|
30 | CFAFList absBiFactorizeMain (const CanonicalForm& F, ///<[in] s.a. |
---|
31 | bool full= false ///<[in] true if all |
---|
32 | ///< factors should be |
---|
33 | ///< returned |
---|
34 | ); |
---|
35 | #endif |
---|
36 | |
---|
37 | /// normalize factors, i.e. make factors monic |
---|
38 | static inline |
---|
39 | void normalize (CFAFList & L) |
---|
40 | { |
---|
41 | for (CFAFListIterator i= L; i.hasItem(); i++) |
---|
42 | i.getItem()= CFAFactor (i.getItem().factor()/Lc (i.getItem().factor()), |
---|
43 | i.getItem().minpoly(), i.getItem().exp()); |
---|
44 | } |
---|
45 | |
---|
46 | /// univariate absolute factorization over Q |
---|
47 | /// |
---|
48 | /// @return uniAbsFactorize returns a list whose entries contain three entities: |
---|
49 | /// an absolute irreducible factor, an irreducible univariate polynomial |
---|
50 | /// that defines the minimal field extension over which the irreducible |
---|
51 | /// factor is defined (note: in case the factor is already defined over |
---|
52 | /// Q[t]/(t), 1 is returned as defining poly), and the multiplicity of |
---|
53 | /// the absolute irreducible factor |
---|
54 | CFAFList uniAbsFactorize (const CanonicalForm& F, ///<[in] univariate poly |
---|
55 | ///< irreducible over Q |
---|
56 | bool full= false ///<[in] true if all factors |
---|
57 | ///< should be returned |
---|
58 | ); |
---|
59 | |
---|
60 | #endif |
---|