1 #ifndef GINAC_POLYNOMIAL_PREM_TCC
2 #define GINAC_POLYNOMIAL_PREM_TCC
10 /// Compute the pseudo-remainder of univariate polynomials @a a and @a b
11 /// Pseudo remainder \f$r(x)\f$ is defined as
12 /// \f$\beta^l a(x) = b(x) q(x) + r(x) \f$, where \f$\beta\f$ is leading
13 /// coefficient of \f$b(x)\f$ and \f$l = degree(a) - degree(b) + 1\f$
14 /// FIXME: this implementation is extremely dumb.
15 template<typename T> bool pseudoremainder(T& r, const T& a, const T& b)
17 typedef typename T::value_type ring_t;
18 bug_on(b.size() == 0, "division by zero");
19 if (a.size() == 1 && b.size() == 1) {
27 if (degree(b) > degree(a)) {
32 const ring_t one = get_ring_elt(b[0], 1);
33 const std::size_t l = degree(a) - degree(b) + 1;
34 const ring_t blcoeff = lcoeff(b);
35 const ring_t b_lth = expt_pos(blcoeff, l);
37 return remainder_in_ring(r, a, b);
41 return remainder_in_ring(r, a_, b);
46 #endif // GINAC_POLYNOMIAL_PREM_TCC