*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
const ex lc_gcd = euclid_gcd(AL, BL, mainvar, p);
// The estimate of degree of the gcd of Ab and Bb
const ex lc_gcd = euclid_gcd(AL, BL, mainvar, p);
// The estimate of degree of the gcd of Ab and Bb
- int gcd_deg = std::min(degree(Aprim, mainvar), degree(Bprim, mainvar));
+ exp_vector_t gcd_deg = std::min(degree_vector(Aprim, restvars),
+ degree_vector(Bprim, restvars));
const cln::cl_I correct_lc = smod(lcb_gcd*recip(Cblc, p), p);
Cb = (Cb*numeric(correct_lc)).smod(pn);
const cln::cl_I correct_lc = smod(lcb_gcd*recip(Cblc, p), p);
Cb = (Cb*numeric(correct_lc)).smod(pn);
if (img_gcd_deg < gcd_deg) {
// The degree decreased, previous homomorphisms were
// bad, so we have to start it all over.
if (img_gcd_deg < gcd_deg) {
// The degree decreased, previous homomorphisms were
// bad, so we have to start it all over.
const ex H_lcoeff = lcoeff_wrt(H, restvars);
if (H_lcoeff.is_equal(lc_gcd)) {
const ex H_lcoeff = lcoeff_wrt(H, restvars);
if (H_lcoeff.is_equal(lc_gcd)) {
ex C /* primitive part of H */, contH /* dummy */;
primpart_content(C, contH, H, vars, p);
// Normalize GCD so that leading coefficient is 1
ex C /* primitive part of H */, contH /* dummy */;
primpart_content(C, contH, H, vars, p);
// Normalize GCD so that leading coefficient is 1
if (divide_in_z_p(Aprim, C, dummy1, vars, p) &&
divide_in_z_p(Bprim, C, dummy2, vars, p))
return (cont_gcd*C).expand().smod(pn);
if (divide_in_z_p(Aprim, C, dummy1, vars, p) &&
divide_in_z_p(Bprim, C, dummy2, vars, p))
return (cont_gcd*C).expand().smod(pn);