Source code for algorithms.arithmetic.gcd

"""
Greatest common divisor (gcd) of two or more integers, which are not all zero, is the largest positive integer that
divides each of the integers.
"""
from functools import reduce

from algorithms.arithmetic.utils import positive_integer


def _gcd(integer_a: int, integer_b: int) -> int:
    """
    Private function for calculating GCD [greatest common divisor] of 2 integers

    Args:
        integer_a: first integer
        integer_b: second integer

    Returns:
        Greatest common divisor of 2 positive integers.
    """
    # Check that numbers are positive integers
    positive_integer(integer_a)
    positive_integer(integer_b)

    current_gcd = 1
    for divisor in range(2, min(integer_a, integer_b) + 1):
        if integer_a % divisor == 0 and integer_b % divisor == 0:
            if divisor > current_gcd:
                current_gcd = divisor
    return current_gcd


[docs]def gcd(*integer_nums: int) -> int: """ Function for calculating GCD [greatest common divisor] of N integers Args: *integer_nums: integer arguments Returns: Greatest common divisor of N positive integers Examples: >>> gcd(54, 24) 6 >>> gcd(2, 4, 6, 8, 16) 2 """ return int(reduce((lambda i, j: _gcd(i, j)), integer_nums))