def GCF(a, b):
    """
    Finds Greatest Common Factor of two given numbers
    :param a: arbitrary first number
    :type a: int
    :param b: arbitrary second number
    :type b: int
    :return: greatest common factor
    :rtype: int
    """
    if type(a) is not int or type(b) is not int:
        raise TypeError('Input must be float type.')

    if b > a:
        return GCF(b, a)

    if a % b == 0:
        return b

    return GCF(b, a % b)