/// <summary> /// Runs the EEA on two BigIntegers /// </summary> /// <param name="A">Quotient A</param> /// <param name="B">Quotient B</param> /// <returns>Return a BigIntEuclidean object that contains the result in the variables X, Y, and GCD</returns> /// /// <remarks> /// Implemented from pseudocode on <a href="http://en.wikipedia.org/wiki/Extended_Euclidean_algorithm"/>Wikipedia /// </remarks> public static BigIntEuclidean Calculate(BigInteger A, BigInteger B) { BigInteger x = BigInteger.Zero; BigInteger lastX = BigInteger.One; BigInteger y = BigInteger.One; BigInteger lastY = BigInteger.Zero; while (!B.Equals(BigInteger.Zero)) { BigInteger[] quotientAndRemainder = A.DivideAndRemainder(B); BigInteger quotient = quotientAndRemainder[0]; BigInteger temp = A; A = B; B = quotientAndRemainder[1]; temp = x; x = lastX.Subtract(quotient.Multiply(x)); lastX = temp; temp = y; y = lastY.Subtract(quotient.Multiply(y)); lastY = temp; } BigIntEuclidean result = new BigIntEuclidean(); result.X = lastX; result.Y = lastY; result.GCD = A; return result; }
/// <summary> /// Runs the EEA on two BigIntegers /// </summary> /// <param name="A">Quotient A</param> /// <param name="B">Quotient B</param> /// <returns>Return a BigIntEuclidean object that contains the result in the variables X, Y, and GCD</returns> /// /// <remarks> /// Implemented from pseudocode on <a href="http://en.wikipedia.org/wiki/Extended_Euclidean_algorithm"/>Wikipedia /// </remarks> public static BigIntEuclidean Calculate(BigInteger A, BigInteger B) { BigInteger x = BigInteger.Zero; BigInteger lastX = BigInteger.One; BigInteger y = BigInteger.One; BigInteger lastY = BigInteger.Zero; while (!B.Equals(BigInteger.Zero)) { BigInteger[] quotientAndRemainder = A.DivideAndRemainder(B); BigInteger quotient = quotientAndRemainder[0]; BigInteger temp = A; A = B; B = quotientAndRemainder[1]; temp = x; x = lastX.Subtract(quotient.Multiply(x)); lastX = temp; temp = y; y = lastY.Subtract(quotient.Multiply(y)); lastY = temp; } BigIntEuclidean result = new BigIntEuclidean(); result.X = lastX; result.Y = lastY; result.GCD = A; return(result); }