358 return power (A, degBx);
360 return power (B, degAx);
363 return power (A, degBx);
365 return power (B, degAx);
393 bool extOfExt=
false;
397 if (!algExt && (p < (1 << 28)))
401 int deg= ceil (29.0*((
double)
log (2)/
log (p)))+1;
405 gen= AlgExtGen.
clone();
406 for (
int i= 0;
i <
p;
i++)
416 int deg= ceil (29.0*((
double)
log (2)/
log (p)));
420 mpz_init (field_size);
421 mpz_ui_pow_ui (field_size, p,
425 if (mpz_fits_sint_p (field_size))
431 bool primFail=
false;
434 ASSERT (!primFail,
"failure in integer factorizer");
438 imPrimElemAlpha=
mapPrimElem (primElemAlpha, alpha, v);
439 F=
mapUp (F, alpha, v, primElemAlpha, imPrimElemAlpha, source, dest);
440 G=
mapUp (G, alpha, v, primElemAlpha, imPrimElemAlpha, source, dest);
445 mpz_ui_pow_ui (field_size, p, deg);
446 while (deg /
degree (
getMipo (alpha)) >= 2 && !mpz_fits_sint_p (field_size))
449 mpz_ui_pow_ui (field_size, p, deg);
456 bool primFail=
false;
459 ASSERT (!primFail,
"failure in integer factorizer");
463 imPrimElemAlpha=
mapPrimElem (primElemAlpha, alpha, v);
464 F=
mapUp (F, alpha, v, primElemAlpha, imPrimElemAlpha, source, dest);
465 G=
mapUp (G, alpha, v, primElemAlpha, imPrimElemAlpha, source, dest);
468 mpz_clear (field_size);
471 gen= AlgExtGen.
clone();
472 for (
int i= 0;
i <
p;
i++)
484 H=
newtonInterp ((*gen).item(), recResult, newtonPoly, modResult,
y);
492 if (count > bound || (prob && equalCount == 2 && !H.
inCoeffDomain()))
494 if (!algExt &&
degree (H, alpha) <= 0)
498 if (extOfExt && !
isInExtension (H, imPrimElemAlpha, 1, primElemAlpha,
501 H=
mapDown (H, primElemAlpha, imPrimElemAlpha, alpha, dest, source);
511 newtonPoly *= (y - (*gen).item());
512 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 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)