(f, g=None, *gens, **args)
Compute GCD of ``f`` and ``g``.

    Examples
    ========

    >>> from sympy import gcd
    >>> from sympy.abc import x

    >>> gcd(x**2 - 1, x**2 - 3*x + 2)
    x - 1
Compute GCD of ``f`` and ``g``.
Compute GCD of f and g .
def gcd(f, g=None, *gens, **args):
    """
    Compute GCD of ``f`` and ``g``.

    Examples
    ========

    >>> from sympy import gcd
    >>> from sympy.abc import x

    >>> gcd(x**2 - 1, x**2 - 3*x + 2)
    x - 1

    """
    if hasattr(f, '__iter__'):
        if g is not None:
            gens = (g,) + gens

        return gcd_list(f, *gens, **args)
    elif g is None:
        raise TypeError("gcd() takes 2 arguments or a sequence of arguments")

    options.allowed_flags(args, ['polys'])

    try:
        (F, G), opt = parallel_poly_from_expr((f, g), *gens, **args)
    except PolificationFailed as exc:
        domain, (a, b) = construct_domain(exc.exprs)

        try:
            return domain.to_sympy(domain.gcd(a, b))
        except NotImplementedError:
            raise ComputationFailed('gcd', 2, exc)

    result = F.gcd(G)

    if not opt.polys:
        return result.as_expr()
    else:
        return result
def gcd ( f , g = None , * gens , * * args ) : if hasattr ( f , '__iter__' ) : if g is not None : gens = ( g , ) + gens return gcd_list ( f , * gens , * * args ) elif g is None : raise TypeError ( "gcd() takes 2 arguments or a sequence of arguments" ) options . allowed_flags ( args , [ 'polys' ] ) try : ( F , G ) , opt = parallel_poly_from_expr ( ( f , g ) , * gens , * * args ) except PolificationFailed as exc : domain , ( a , b ) = construct_domain ( exc . exprs ) try : return domain . to_sympy ( domain . gcd ( a , b ) ) except NotImplementedError : raise ComputationFailed ( 'gcd' , 2 , exc ) result = F . gcd ( G ) if not opt . polys : return result . as_expr ( ) else : return result