|
Algorithms_in_C++
1.0.0
Set of algorithms implemented in C++.
|
GCD using extended Euclid's algorithm More...
#include <algorithm>#include <iostream>Functions | |
| template<typename T , typename T2 > | |
| void | update_step (T *r, T *r0, const T2 quotient) |
| template<typename T1 , typename T2 > | |
| void | extendedEuclid_1 (T1 A, T1 B, T1 *GCD, T2 *x, T2 *y) |
| template<typename T , typename T2 > | |
| void | extendedEuclid (T A, T B, T *GCD, T2 *x, T2 *y) |
| int | main () |
| Main function. | |
GCD using extended Euclid's algorithm
Finding coefficients of a and b ie x and y in Bézout's identity
\[\text{gcd}(a, b) = a \times x + b \times y \]
This is also used in finding Modular multiplicative inverse of a number. (A * B)M == 1 Here B is the MMI of A for given M, so extendedEuclid (A, M) gives B.
| void extendedEuclid | ( | T | A, |
| T | B, | ||
| T * | GCD, | ||
| T2 * | x, | ||
| T2 * | y | ||
| ) |
Implementation using recursive algorithm
| [in] | A | unsigned |
| [in] | B | unsigned |
| [out] | GCD | unsigned |
| [in,out] | x | signed |
| [in,out] | y | signed |
| void extendedEuclid_1 | ( | T1 | A, |
| T1 | B, | ||
| T1 * | GCD, | ||
| T2 * | x, | ||
| T2 * | y | ||
| ) |
Implementation using iterative algorithm from Wikipedia
| [in] | A | unsigned |
| [in] | B | unsigned |
| [out] | GCD | unsigned |
| [out] | x | signed |
| [out] | y | signed |
|
inline |