public static IComplexPolynomial GCD(IComplexPolynomial left, IComplexPolynomial right, Complex modulus) { IComplexPolynomial a = left.Clone(); IComplexPolynomial b = right.Clone(); if (b.Degree > a.Degree) { IComplexPolynomial swap = b; b = a; a = swap; } while (!(b.Terms.Length == 0 || b.Terms[0].CoEfficient == 0)) { IComplexPolynomial temp = a; a = b; b = ComplexPolynomial.ModMod(temp, b, modulus); } if (a.Degree == 0) { return(ComplexPolynomial.One); } else { return(a); } }