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

Function gcd_poly_0

factory/cf_gcd.cc:416–475  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

414}
415
416static CanonicalForm
417gcd_poly_0( const CanonicalForm & f, const CanonicalForm & g )
418{
419 CanonicalForm pi, pi1;
420 CanonicalForm C, Ci, Ci1, Hi, bi, pi2;
421 int delta = degree( f ) - degree( g );
422
423 if ( delta >= 0 )
424 {
425 pi = f; pi1 = g;
426 }
427 else
428 {
429 pi = g; pi1 = f; delta = -delta;
430 }
431 Ci = content( pi ); Ci1 = content( pi1 );
432 pi1 = pi1 / Ci1; pi = pi / Ci;
433 C = gcd( Ci, Ci1 );
434 int d= 0;
435 if ( pi.isUnivariate() && pi1.isUnivariate() )
436 {
437#ifdef HAVE_FLINT
438 if (isPurePoly(pi) && isPurePoly(pi1) )
439 return gcd_univar_flint0(pi, pi1 ) * C;
440#else
441#ifdef HAVE_NTL
442 if ( isPurePoly(pi) && isPurePoly(pi1) )
443 return gcd_univar_ntl0(pi, pi1 ) * C;
444#endif
445#endif
446 return gcd_poly_univar0( pi, pi1, true ) * C;
447 }
448 else if ( gcd_test_one( pi1, pi, true, d ) )
449 return C;
450 Variable v = f.mvar();
451 Hi = power( LC( pi1, v ), delta );
452 if ( (delta+1) % 2 )
453 bi = 1;
454 else
455 bi = -1;
456 while ( degree( pi1, v ) > 0 )
457 {
458 pi2 = psr( pi, pi1, v );
459 pi2 = pi2 / bi;
460 pi = pi1; pi1 = pi2;
461 if ( degree( pi1, v ) > 0 )
462 {
463 delta = degree( pi, v ) - degree( pi1, v );
464 if ( (delta+1) % 2 )
465 bi = LC( pi, v ) * power( Hi, delta );
466 else
467 bi = -LC( pi, v ) * power( Hi, delta );
468 Hi = power( LC( pi1, v ), delta ) / power( Hi, delta-1 );
469 }
470 }
471 if ( degree( pi1, v ) == 0 )
472 return C;
473 else

Callers 1

gcd_polyFunction · 0.85

Calls 14

degreeFunction · 0.85
contentFunction · 0.85
isPurePolyFunction · 0.85
gcd_test_oneFunction · 0.85
powerFunction · 0.85
LCFunction · 0.85
psrFunction · 0.85
ppFunction · 0.85
mvarMethod · 0.80
gcdFunction · 0.70
gcd_univar_flint0Function · 0.70
gcd_univar_ntl0Function · 0.70

Tested by

no test coverage detected