コード例 #1
0
        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);
            }
        }