mirror of
https://github.com/TheAlgorithms/Python.git
synced 2024-12-18 09:10:16 +00:00
bb5552efd0
* Recursive euclidean algorithm + doctests and type hints * Fix doctests in recursive method * Added commit suggestions
48 lines
1.2 KiB
Python
48 lines
1.2 KiB
Python
""" https://en.wikipedia.org/wiki/Euclidean_algorithm """
|
|
|
|
|
|
def euclidean_gcd(a: int, b: int) -> int:
|
|
"""
|
|
Examples:
|
|
>>> euclidean_gcd(3, 5)
|
|
1
|
|
|
|
>>> euclidean_gcd(6, 3)
|
|
3
|
|
"""
|
|
while b:
|
|
a, b = b, a % b
|
|
return a
|
|
|
|
|
|
def euclidean_gcd_recursive(a: int, b: int) -> int:
|
|
"""
|
|
Recursive method for euclicedan gcd algorithm
|
|
|
|
Examples:
|
|
>>> euclidean_gcd_recursive(3, 5)
|
|
1
|
|
|
|
>>> euclidean_gcd_recursive(6, 3)
|
|
3
|
|
"""
|
|
return a if b == 0 else euclidean_gcd_recursive(b, a % b)
|
|
|
|
|
|
def main():
|
|
print(f"euclidean_gcd(3, 5) = {euclidean_gcd(3, 5)}")
|
|
print(f"euclidean_gcd(5, 3) = {euclidean_gcd(5, 3)}")
|
|
print(f"euclidean_gcd(1, 3) = {euclidean_gcd(1, 3)}")
|
|
print(f"euclidean_gcd(3, 6) = {euclidean_gcd(3, 6)}")
|
|
print(f"euclidean_gcd(6, 3) = {euclidean_gcd(6, 3)}")
|
|
|
|
print(f"euclidean_gcd_recursive(3, 5) = {euclidean_gcd_recursive(3, 5)}")
|
|
print(f"euclidean_gcd_recursive(5, 3) = {euclidean_gcd_recursive(5, 3)}")
|
|
print(f"euclidean_gcd_recursive(1, 3) = {euclidean_gcd_recursive(1, 3)}")
|
|
print(f"euclidean_gcd_recursive(3, 6) = {euclidean_gcd_recursive(3, 6)}")
|
|
print(f"euclidean_gcd_recursive(6, 3) = {euclidean_gcd_recursive(6, 3)}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|