public static IComplexPolynomial ExtendedGCD(IComplexPolynomial left, IComplexPolynomial right, Complex mod) { IComplexPolynomial rem = ComplexPolynomial.Two; IComplexPolynomial a = left.Clone(); IComplexPolynomial b = right.Clone(); IComplexPolynomial c = ComplexPolynomial.Zero; while (c.CompareTo(ComplexPolynomial.Zero) != 0 && rem.CompareTo(ComplexPolynomial.Zero) != 0 && rem.CompareTo(ComplexPolynomial.One) != 0) { c = ComplexPolynomial.Divide(a, b, out rem); a = b; b = rem; } if (rem.CompareTo(ComplexPolynomial.Zero) != 0 || rem.CompareTo(ComplexPolynomial.One) != 0) { return(ComplexPolynomial.One); } return(rem); }
public static IComplexPolynomial Divide(IComplexPolynomial left, IComplexPolynomial right) { IComplexPolynomial remainder = ComplexPolynomial.Zero; return(ComplexPolynomial.Divide(left, right, out remainder)); }