46#if (__FLINT_RELEASE >= 20700)
47#include <flint/nmod_mpoly_factor.h>
48#include <flint/fmpq_mpoly_factor.h>
49#include <flint/fq_nmod_mpoly_factor.h>
50#include <flint/nmod_poly_factor.h>
51#include <flint/fmpz_poly_factor.h>
52#include <flint/fmpz_mpoly_factor.h>
53#include <flint/fq_nmod_poly_factor.h>
68 if ( !
f.inCoeffDomain() )
76 for (;
i.hasTerms();
i++ )
108 else if (!
f.inBaseDomain() )
114 if (
i.coeff().isOne())
121 if (e!=1)
printf(
"^%d",e);
130 if (e!=1)
printf(
"^%d",e);
202 if (
f.inExtension())
printf(
"E(%d)",
f.level());
211 for ( ;
J.hasItem();
J++,
j++ )
214 printf(
"%d\n",
J.getItem().exp());
223 if (!(L.
getFirst().factor().inCoeffDomain()))
224 printf(
"first entry is not const\n");
225 for ( ;
J.hasItem();
J++,
j++ )
228 if (
tt.inCoeffDomain() && (
j!=0))
229 printf(
"other entry is const\n");
231 while(
j>0) { t*=
tt;
j--; }
240 if (
f.inBaseDomain())
return true;
241 if (
f.level()<0)
return false;
250 if (
f.level()<=0)
return false;
253 if (!(
i.coeff().inBaseDomain()))
return false;
266 ASSERT( ( !
f.inCoeffDomain() ),
"no constants" );
268 for (
int i=1;
i<=n;
i++ )
301 for (
i=
f;
i.hasTerms();
i++ ){
324 for (
i=
f;
i.hasTerms();
i++)
326 elem=
i.coeff()*
power(
f.mvar(),
i.exp());
364 for (
i=
f;
i.hasTerms();
i++)
366 elem=
i.coeff()*
power(
f.mvar(),
i.exp());
400 if (
f.exp() >
g.exp())
return 1;
401 if (
f.exp() <
g.exp())
return 0;
402 if (
f.factor() >
g.factor())
return 1;
411 if (
f.inCoeffDomain() )
416 ( const CanonicalForm & f, const Variable & alpha ) instead");
419 if (!
f.isUnivariate() )
434 CFFactor( n(
j.getItem().factor()),
j.getItem().exp()) );
453 if (
f.isUnivariate())
522#if !defined(HAVE_NTL) && !defined(HAVE_FLINT)
537 #if defined(HAVE_NTL)
552 factoryError (
"multivariate factorization over GF depends on NTL(missing)");
558 #if defined(HAVE_FLINT) && (__FLINT_RELEASE >= 20700) && defined(HAVE_NTL)
562 #if defined(HAVE_NTL)
579 #if defined(HAVE_FLINT) && (__FLINT_RELEASE >= 20700) && defined(HAVE_NTL)
582 #if defined(HAVE_FLINT) && (__FLINT_RELEASE >= 20700)
618 #if !defined(HAVE_FLINT) || (__FLINT_RELEASE < 20700)
620 factoryError (
"multivariate factorization depends on NTL/FLINT(missing)");
634 if (
f.isUnivariate() )
644 #if defined(HAVE_FLINT) && (__FLINT_RELEASE>=20503) && (__FLINT_RELEASE!= 20600)
667 #elif defined(HAVE_NTL)
697 #if defined(HAVE_FLINT) && (__FLINT_RELEASE >= 20700)
735 #if defined(HAVE_NTL)
748 #if !defined(HAVE_FLINT) || (__FLINT_RELEASE < 20700)
780 if (
f.inCoeffDomain() )
791 does not coincide with alpha");
796 if (
f.isUnivariate())
833#if (HAVE_FLINT && __FLINT_RELEASE >= 20400)
892#if !defined(HAVE_NTL) && !defined(HAVE_FLINT)
902 #if (HAVE_FLINT && __FLINT_RELEASE >= 20700)
930 #elif defined(HAVE_NTL)
933 factoryError (
"multivariate factorization over Z/pZ(alpha) depends on NTL/Flint(missing)");
940 if (
f.isUnivariate())
946 #if defined(HAVE_NTL) || defined(HAVE_FLINT)
949 factoryError (
"multivariate factorization over Q(alpha) depends on NTL or FLINT (missing)");
CanonicalForm convertFmpz2CF(const fmpz_t coefficient)
conversion of a FLINT integer to CanonicalForm
CFFList convertFLINTFq_nmod_poly_factor2FacCFFList(const fq_nmod_poly_factor_t fac, const Variable &x, const Variable &alpha, const fq_nmod_ctx_t fq_con)
conversion of a FLINT factorization over Fq (for word size p) to a CFFList
void convertFacCF2Fq_nmod_poly_t(fq_nmod_poly_t result, const CanonicalForm &f, const fq_nmod_ctx_t ctx)
conversion of a factory univariate poly over F_q to a FLINT fq_nmod_poly_t
CFFList convertFLINTnmod_poly_factor2FacCFFList(const nmod_poly_factor_t fac, const mp_limb_t leadingCoeff, const Variable &x)
conversion of a FLINT factorization over Z/p (for word size p) to a CFFList
void convertFacCF2Fmpz_poly_t(fmpz_poly_t result, const CanonicalForm &f)
conversion of a factory univariate polynomial over Z to a fmpz_poly_t
This file defines functions for conversion to FLINT (www.flintlib.org) and back.
CFFList convertFLINTfmpz_poly_factor2FacCFFList(const fmpz_poly_factor_t fac, const Variable &x)
conversion of a FLINT factorization over Z to a CFFList
CFFList convertNTLvec_pair_GF2X_long2FacCFFList(const vec_pair_GF2X_long &e, GF2, const Variable &x)
NAME: convertNTLvec_pair_GF2X_long2FacCFFList.
ZZX convertFacCF2NTLZZX(const CanonicalForm &f)
zz_pEX convertFacCF2NTLzz_pEX(const CanonicalForm &f, const zz_pX &mipo)
CFFList convertNTLvec_pair_zzpEX_long2FacCFFList(const vec_pair_zz_pEX_long &e, const zz_pE &cont, const Variable &x, const Variable &alpha)
CFFList convertNTLvec_pair_GF2EX_long2FacCFFList(const vec_pair_GF2EX_long &e, const GF2E &cont, const Variable &x, const Variable &alpha)
NAME: convertNTLvec_pair_GF2EX_long2FacCFFList.
CFFList convertNTLvec_pair_zzpX_long2FacCFFList(const vec_pair_zz_pX_long &e, const zz_p cont, const Variable &x)
GF2EX convertFacCF2NTLGF2EX(const CanonicalForm &f, const GF2X &mipo)
CanonicalForm in Z_2(a)[X] to NTL GF2EX.
zz_pX convertFacCF2NTLzzpX(const CanonicalForm &f)
GF2X convertFacCF2NTLGF2X(const CanonicalForm &f)
NAME: convertFacCF2NTLGF2X.
CFFList convertNTLvec_pair_ZZX_long2FacCFFList(const vec_pair_ZZX_long &e, const ZZ &cont, const Variable &x)
NAME: convertNTLvec_pair_ZZX_long2FacCFFList.
Conversion to and from NTL.
CanonicalForm cd(bCommonDen(FF))
static void sort(int **points, int sizePoints)
CanonicalForm bCommonDen(const CanonicalForm &f)
CanonicalForm bCommonDen ( const CanonicalForm & f )
declarations of higher level algorithms.
#define ASSERT(expression, message)
static const int SW_USE_FL_GCD_P
set to 1 to use Flints gcd over F_p
static const int SW_RATIONAL
set to 1 for computations over Q
static const int SW_USE_NTL_SORT
set to 1 to sort factors in a factorization
static const int SW_USE_FL_FAC_0
set to 1 to prefer flints multivariate factorization over Z/p
static const int SW_USE_FL_FAC_P
set to 1 to prefer flints multivariate factorization over Z/p
static const int SW_BERLEKAMP
set to 1 to use Factorys Berlekamp alg.
#define GaloisFieldDomain
void test_cff(CFFList &L, const CanonicalForm &f)
Variable get_max_degree_Variable(const CanonicalForm &f)
get_max_degree_Variable returns Variable with highest degree.
bool isPurePoly(const CanonicalForm &f)
int cmpCF(const CFFactor &f, const CFFactor &g)
int find_mvar(const CanonicalForm &f)
bool isPurePoly_m(const CanonicalForm &f)
void getTerms(const CanonicalForm &f, const CanonicalForm &t, CFList &result)
get_Terms: Split the polynomial in the containing terms.
CFList get_Terms(const CanonicalForm &f)
VAR int singular_homog_flag
void out_cf(const char *s1, const CanonicalForm &f, const char *s2)
cf_algorithm.cc - simple mathematical algorithms.
CanonicalForm homogenize(const CanonicalForm &f, const Variable &x)
homogenize homogenizes f with Variable x
CFFList sqrFree(const CanonicalForm &f, bool sort)
squarefree factorization
void find_exp(const CanonicalForm &f, int *exp_f)
CFFList factorize(const CanonicalForm &f, bool issqrfree)
factorization over or
Iterators for CanonicalForm's.
CanonicalForm compress(const CanonicalForm &f, CFMap &m)
CanonicalForm compress ( const CanonicalForm & f, CFMap & m )
VAR void(* factoryError)(const char *s)
class to iterate through CanonicalForm's
void sort(int(*)(const T &, const T &))
factory's class for variables
CFFList AlgExtFactorize(const CanonicalForm &F, const Variable &alpha)
factorize a univariate polynomial over algebraic extension of Q
Univariate factorization over algebraic extension of Q using Trager's algorithm.
multivariate factorization over Q(a)
CFFList ratFactorize(const CanonicalForm &G, const Variable &v=Variable(1), bool substCheck=true)
factorize a multivariate polynomial over
CFList ratSqrfFactorize(const CanonicalForm &G, const Variable &v=Variable(1))
factorize a squarefree multivariate polynomial over
This file provides functions for factorizing a multivariate polynomial over , or GF.
CFList FpSqrfFactorize(const CanonicalForm &F)
factorize a squarefree multivariate polynomial over
CFFList FpFactorize(const CanonicalForm &G, bool substCheck=true)
factorize a multivariate polynomial over
CFFList GFFactorize(const CanonicalForm &G, bool substCheck=true)
factorize a multivariate polynomial over GF
CFList GFSqrfFactorize(const CanonicalForm &F)
factorize a squarefree multivariate polynomial over GF
CFFList FqFactorize(const CanonicalForm &G, const Variable &alpha, bool substCheck=true)
factorize a multivariate polynomial over
This file provides functions for squarefrees factorizing over , or GF.
CFFList FqSqrf(const CanonicalForm &F, const Variable &alpha, bool sort=true)
squarefree factorization over . If input is not monic, the leading coefficient is dropped
CFFList FpSqrf(const CanonicalForm &F, bool sort=true)
squarefree factorization over . If input is not monic, the leading coefficient is dropped
fq_nmod_ctx_clear(fq_con)
nmod_poly_init(FLINTmipo, getCharacteristic())
fq_nmod_ctx_init_modulus(fq_con, FLINTmipo, "Z")
convertFacCF2nmod_poly_t(FLINTmipo, M)
nmod_poly_clear(FLINTmipo)
fq_nmod_poly_clear(prod, fq_con)
bool isZero(const CFArray &A)
checks if entries of A are zero
CFFList FpFactorizeUnivariateB(const CanonicalForm &f, bool issqrfree=false)
CFFList FpFactorizeUnivariateCZ(const CanonicalForm &f, bool issqrfree, int numext, const Variable alpha, const Variable beta)
CFFList ZFactorizeMultivariate(const CanonicalForm &f, bool issqrfree)
CFFList sqrFreeZ(const CanonicalForm &a)
CFFList sortCFFList(CFFList &F)
squarefree part and factorization over Q, Q(a)
CFFList ZFactorizeUnivariate(const CanonicalForm &ff, bool issqrfree=false)
CanonicalForm getMipo(const Variable &alpha, const Variable &x)
void FACTORY_PUBLIC gmp_numerator(const CanonicalForm &f, mpz_ptr result)
void FACTORY_PUBLIC gmp_denominator(const CanonicalForm &f, mpz_ptr result)
static int max(int a, int b)
static long imm2int(const InternalCF *const imm)
Factory's internal integers.
int status int void * buf
helper functions for conversion to and from Singular
bool getReduce(const Variable &alpha)