divide method

List<GFPoly> divide(
  1. GFPoly other
)

Implementation

List<GFPoly> divide(GFPoly other) {
  GFPoly quotient = gf.zero();
  GFPoly remainder = this;
  final GaloisField fld = gf;
  final int denomLeadTerm = other.getCoefficient(other.getDegree());
  final int inversDenomLeadTerm = fld.invers(denomLeadTerm);
  while (remainder.getDegree() >= other.getDegree() && !remainder.zero()) {
    final int degreeDiff = remainder.getDegree() - other.getDegree();
    final int scale = fld.multiply(remainder.getCoefficient(remainder.getDegree()), inversDenomLeadTerm);
    final GFPoly term = other.multByMonominal(degreeDiff, scale);
    final GFPoly itQuot = GFPoly.monominalPoly(fld, degreeDiff, scale);
    quotient = quotient.addOrSubstract(itQuot);
    remainder = remainder.addOrSubstract(term);
  }
  return <GFPoly>[quotient, remainder];
}