967{
968
969 if (f == nullptr) return nullptr;
970 if (f->deg < g->deg)
971 {
972 return nullptr;
973 }
974 int shift = f->deg - g->deg;
976
977 if (level == 0)
978 {
979 long *
p = f->arr.ints;
980 long *q = g->arr.ints;
981 for (int d = f->deg; shift >= 0; d--, shift--)
982 {
984 if (a != 0)
985 {
986 quot->arr.ints[shift] = a;
988 for (int j = 0; j <= g->deg; j++)
990 }
991 }
993 }
994 else
995 {
996 TowerPolynomial *
p = f->arr.polys;
997 TowerPolynomial *q = g->arr.polys;
998 for (int d = f->deg; shift >= 0; d--, shift--)
999 {
1000 TowerPolynomial a =
p[d];
1001 if (a != nullptr)
1002 {
1003 quot->arr.polys[shift] =
copy(level - 1, a);
1004 for (int j = 0; j <= g->deg; j++)
1005 {
1006 TowerPolynomial b =
mult(level - 1, a, q[j],
true);
1008 }
1009 }
1010 }
1012 }
1013 return quot;
1014}
void subtract_in_place(int level, TowerPolynomial &f, const TowerPolynomial g)
static TowerPolynomial alloc_poly_n(int deg, TowerPolynomial *elems=nullptr)
static TowerPolynomial copy(int level, const TowerPolynomial f)
void reset_degree_n(int level, TowerPolynomial &f)
TowerPolynomial mult(int level, const TowerPolynomial f, const TowerPolynomial g, bool reduce_by_extension)
void reset_degree_0(TowerPolynomial &f)
void ZZp_APXY(long charac, long &a, long b, long c)
void ZZp_NEGATE(long charac, long &a)