360 return power (A, degBx);
362 return power (B, degAx);
365 return power (A, degBx);
367 return power (B, degAx);
395 bool extOfExt=
false;
399 if (!algExt && (p < (1 << 28)))
403 int deg=
ceil (29.0*((
double)
log (2)/
log (p)))+1;
407 gen= AlgExtGen.
clone();
408 for (
int i= 0;
i <
p;
i++)
418 int deg=
ceil (29.0*((
double)
log (2)/
log (p)));
422 mpz_init (field_size);
423 mpz_ui_pow_ui (field_size, p,
427 if (mpz_fits_sint_p (field_size))
433 bool primFail=
false;
436 ASSERT (!primFail,
"failure in integer factorizer");
440 imPrimElemAlpha=
mapPrimElem (primElemAlpha, alpha, v);
441 F=
mapUp (F, alpha, v, primElemAlpha, imPrimElemAlpha, source, dest);
442 G=
mapUp (G, alpha, v, primElemAlpha, imPrimElemAlpha, source, dest);
447 mpz_ui_pow_ui (field_size, p, deg);
448 while (deg /
degree (
getMipo (alpha)) >= 2 && !mpz_fits_sint_p (field_size))
451 mpz_ui_pow_ui (field_size, p, deg);
458 bool primFail=
false;
461 ASSERT (!primFail,
"failure in integer factorizer");
465 imPrimElemAlpha=
mapPrimElem (primElemAlpha, alpha, v);
466 F=
mapUp (F, alpha, v, primElemAlpha, imPrimElemAlpha, source, dest);
467 G=
mapUp (G, alpha, v, primElemAlpha, imPrimElemAlpha, source, dest);
470 mpz_clear (field_size);
473 gen= AlgExtGen.
clone();
474 for (
int i= 0;
i <
p;
i++)
486 H=
newtonInterp ((*gen).item(), recResult, newtonPoly, modResult,
y);
494 if (count > bound || (prob && equalCount == 2 && !H.
inCoeffDomain()))
496 if (!algExt &&
degree (H, alpha) <= 0)
500 if (extOfExt && !
isInExtension (H, imPrimElemAlpha, 1, primElemAlpha,
503 H=
mapDown (H, primElemAlpha, imPrimElemAlpha, alpha, dest, source);
513 newtonPoly *= (y - (*gen).item());
514 if ((*gen).hasItems())
int status int void size_t count
static CanonicalForm mapDown(const CanonicalForm &F, const Variable &alpha, const CanonicalForm &G, CFList &source, CFList &dest)
the CanonicalForm G is the output of map_up, returns F considered as an element over ...
generate all elements in F_p(alpha) starting from 0
const CanonicalForm int const CFList const Variable & y
static CanonicalForm bound(const CFMatrix &M)
static CanonicalForm newtonInterp(const CanonicalForm &alpha, const CanonicalForm &u, const CanonicalForm &newtonPoly, const CanonicalForm &oldInterPoly, const Variable &x)
template CanonicalForm tmax(const CanonicalForm &, const CanonicalForm &)
CanonicalForm primitiveElement(const Variable &alpha, Variable &beta, bool &fail)
determine a primitive element of , is a primitive element of a field which is isomorphic to ...
factory's class for variables
virtual class for generators
bool isInExtension(const CanonicalForm &F, const CanonicalForm &gamma, const int k, const CanonicalForm &delta, CFList &source, CFList &dest)
tests if F is not contained in a subfield defined by gamma (Fq case) or k (GF case) ...
generate all elements in F_p starting from 0
gmp_float log(const gmp_float &a)
int myCompress(const CanonicalForm &F, const CanonicalForm &G, CFMap &M, CFMap &N, bool topLevel)
compressing two polynomials F and G, M is used for compressing, N to reverse the compression ...
CanonicalForm getMipo(const Variable &alpha, const Variable &x)
void prune(Variable &alpha)
Variable rootOf(const CanonicalForm &, char name='@')
returns a symbolic root of polynomial with name name Use it to define algebraic variables ...
static CanonicalForm mapUp(const Variable &alpha, const Variable &beta)
and is a primitive element, returns the image of
const signed long ceil(const ampf< Precision > &x)
const CanonicalForm CFMap CFMap & N
CanonicalForm resultantFp(const CanonicalForm &A, const CanonicalForm &B, const Variable &x, bool prob)
modular resultant algorihtm over Fp
const CanonicalForm CFMap & M
const Variable & v
< [in] a sqrfree bivariate poly
#define STICKYASSERT(expression, message)
static CanonicalForm uniResultant(const CanonicalForm &F, const CanonicalForm &G)
virtual CFGenerator * clone() const
CanonicalForm randomIrredpoly(int i, const Variable &x)
computes a random monic irreducible univariate polynomial in x over Fp of degree i via NTL ...
#define ASSERT(expression, message)
CanonicalForm mapPrimElem(const CanonicalForm &primElem, const Variable &alpha, const Variable &beta)
compute the image of a primitive element of in . We assume .
CFGenerator * clone() const
static void evalPoint(const CanonicalForm &F, const CanonicalForm &G, CanonicalForm &FEval, CanonicalForm &GEval, CFGenerator &evalPoint)