822{
823 if (f == nullptr || g == nullptr) return nullptr;
825
826 for (int i = 0; i <= f->deg; i++)
827 {
828 TowerPolynomial a = f->arr.polys[i];
829 if (a != nullptr)
830 for (int j = 0; j <= g->deg; j++)
831 {
832 TowerPolynomial b = g->arr.polys[j];
833 TowerPolynomial c =
mult(level - 1, a, b,
true);
834 if (c != nullptr)
835 {
838 }
839 }
840 }
841
842 if (reduce_by_extension &&
extensions[level] !=
nullptr)
845}
TowerPolynomial * extensions
static TowerPolynomial alloc_poly_n(int deg, TowerPolynomial *elems=nullptr)
void remainder(int level, TowerPolynomial &f, const TowerPolynomial g)
void add_in_place(int level, TowerPolynomial &f, const TowerPolynomial g)
TowerPolynomial mult(int level, const TowerPolynomial f, const TowerPolynomial g, bool reduce_by_extension)
static void dealloc_poly(TowerPolynomial &f)
VALGRIND_MAKE_MEM_DEFINED & result(result)