MCPcopy Create free account
hub / github.com/Singular/Singular / gcd_poly

Function gcd_poly

factory/cf_gcd.cc:492–566  ·  view source on GitHub ↗

CanonicalForm gcd_poly ( const CanonicalForm & f, const CanonicalForm & g ) * * gcd_poly() - calculate polynomial gcd. * * This is the dispatcher for polynomial gcd calculation. * Different gcd variants get called depending the input, characteristic, and * on switches (cf_defs.h) * * With the current settings from Singular (i.e. SW_USE_EZGCD= on, * SW_USE_EZGCD_P= on, SW_USE_CHINREM_GCD=

Source from the content-addressed store, hash-verified

490 *
491**/
492CanonicalForm gcd_poly ( const CanonicalForm & f, const CanonicalForm & g )
493{
494 CanonicalForm fc, gc;
495 bool fc_isUnivariate=f.isUnivariate();
496 bool gc_isUnivariate=g.isUnivariate();
497 bool fc_and_gc_Univariate=fc_isUnivariate && gc_isUnivariate;
498 fc = f;
499 gc = g;
500 int ch=getCharacteristic();
501 if ( ch != 0 )
502 {
503 if (0) {} // dummy, to be able to build without NTL and FLINT
504 #if defined(HAVE_FLINT) && ( __FLINT_RELEASE >= 20503)
505 if ( isOn( SW_USE_FL_GCD_P)
506 && (CFFactory::gettype() != GaloisFieldDomain)
507 #ifdef HAVE_NTL
508 && (ch>10) // if we have NTL: it is better for char <11
509 #endif
510 &&(!hasAlgVar(fc)) && (!hasAlgVar(gc)))
511 {
512 return gcdFlintMP_Zp(fc,gc);
513 }
514 #endif
515 #ifdef HAVE_NTL
516 if ((!fc_and_gc_Univariate) && (isOn( SW_USE_EZGCD_P )))
517 {
518 fc= EZGCD_P (fc, gc);
519 }
520 #endif
521 #if defined(HAVE_NTL) || defined(HAVE_FLINT)
522 else if (isOn(SW_USE_FF_MOD_GCD) && !fc_and_gc_Univariate)
523 {
524 Variable a;
525 if (hasFirstAlgVar (fc, a) || hasFirstAlgVar (gc, a))
526 fc=modGCDFq (fc, gc, a);
527 else if (CFFactory::gettype() == GaloisFieldDomain)
528 fc=modGCDGF (fc, gc);
529 else
530 fc=modGCDFp (fc, gc);
531 }
532 #endif
533 else
534 fc = gcd_poly_p( fc, gc );
535 }
536 else if (!fc_and_gc_Univariate) /* && char==0*/
537 {
538 #if defined(HAVE_FLINT) && ( __FLINT_RELEASE >= 20503)
539 if (( isOn( SW_USE_FL_GCD_0) )
540 &&(!hasAlgVar(fc)) && (!hasAlgVar(gc)))
541 {
542 return gcdFlintMP_QQ(fc,gc);
543 }
544 else
545 #endif
546 #ifdef HAVE_NTL
547 if ( isOn( SW_USE_EZGCD ) )
548 fc= ezgcd (fc, gc);
549 else

Callers 4

modGCDZFunction · 0.85
gcd_poly_univar0Function · 0.85
gcdFunction · 0.85
gcd_poly_univar0Function · 0.85

Calls 15

getCharacteristicFunction · 0.85
isOnFunction · 0.85
hasAlgVarFunction · 0.85
gcdFlintMP_ZpFunction · 0.85
EZGCD_PFunction · 0.85
hasFirstAlgVarFunction · 0.85
gcd_poly_pFunction · 0.85
gcdFlintMP_QQFunction · 0.85
ezgcdFunction · 0.85
modGCDZFunction · 0.85
gcd_poly_0Function · 0.85
modGCDFqFunction · 0.70

Tested by

no test coverage detected