Macaulay2 Engine
Loading...
Searching...
No Matches

◆ vec_remove_monomial_factors()

vec Ring::vec_remove_monomial_factors ( vec f,
bool make_squarefree_only ) const

Definition at line 978 of file ring-vecs.cpp.

979{
980 const PolynomialRing *PR = cast_to_PolynomialRing();
981 if (PR == nullptr) return copy_vec(f);
982 if (f == nullptr) return nullptr;
983
985
986 Nterm *t = f->coeff;
987 PR->getMonoid()->to_expvector(t->monom, exp); // Get the process started
988
989 for (vec a = f; a != nullptr; a = a->next) monomial_divisor(a->coeff, exp);
990
991 if (make_squarefree_only)
992 // Now divide each term by exp[i]-1, if exp[i] >= 2
993 for (int i = 0; i < PR->n_vars(); i++)
994 if (exp[i] >= 1) exp[i]--;
995
996 vec result = vec_divide_by_expvector(exp, f);
997
998 freemem(exp);
999 return result;
1000}
exponents::Exponents exponents_t
void to_expvector(const_monomial m, exponents_t result_exp) const
Definition monoid.cpp:747
virtual const Monoid * getMonoid() const
Definition polyring.hpp:282
int n_vars() const
Definition polyring.hpp:196
virtual void monomial_divisor(const ring_elem a, exponents_t exp) const
Definition ring.cpp:349
virtual const PolynomialRing * cast_to_PolynomialRing() const
Definition ring.hpp:243
vec vec_divide_by_expvector(const_exponents exp, const vec v) const
vec copy_vec(const vecterm *v) const
Definition ring-vecs.cpp:91
void freemem(void *s)
Definition m2-mem.cpp:103
VALGRIND_MAKE_MEM_DEFINED & result(result)
const mpreal exp(const mpreal &x, mp_rnd_t r=mpreal::get_default_rnd())
Definition mpreal.h:2298
#define newarray_atomic(T, len)
Definition newdelete.hpp:91
int monom[1]
Definition ringelem.hpp:160

References cast_to_PolynomialRing(), copy_vec(), freemem(), PolynomialRing::getMonoid(), Nterm::monom, monomial_divisor(), PolynomialRing::n_vars(), newarray_atomic, result(), Monoid::to_expvector(), and vec_divide_by_expvector().