(y, n)
return x, t == y
Return a tuple containing x = floor(y**(1/n))
    and a boolean indicating whether the result is exact (that is,
    whether x**n == y).

    >>> from sympy import integer_nthroot
    >>> integer_nthroot(16,2)
    (4, True)
    >>> integer_nthroot(26,2)
    (5, False)
Return a tuple containing x = floor(y**(1/n))
    and a boolean indicating whether the result is exact (that is,
    whether x**n == y).
Return a tuple containing x = floor ( y ** ( 1 / n )) and a boolean indicating whether the result is exact ( that is whether x ** n == y ) .
def integer_nthroot(y, n):
    """
    Return a tuple containing x = floor(y**(1/n))
    and a boolean indicating whether the result is exact (that is,
    whether x**n == y).

    >>> from sympy import integer_nthroot
    >>> integer_nthroot(16,2)
    (4, True)
    >>> integer_nthroot(26,2)
    (5, False)

    """
    y, n = int(y), int(n)
    if y < 0:
        raise ValueError("y must be nonnegative")
    if n < 1:
        raise ValueError("n must be positive")
    if y in (0, 1):
        return y, True
    if n == 1:
        return y, True
    if n == 2:
        x, rem = mpmath_sqrtrem(y)
        return int(x), not rem
    if n > y:
        return 1, False
    # Get initial estimate for Newton's method. Care must be taken to
    # avoid overflow
    try:
        guess = int(y**(1./n) + 0.5)
    except OverflowError:
        exp = _log(y, 2)/n
        if exp > 53:
            shift = int(exp - 53)
            guess = int(2.0**(exp - shift) + 1) << shift
        else:
            guess = int(2.0**exp)
    #print n
    if guess > 2**50:
        # Newton iteration
        xprev, x = -1, guess
        while 1:
            t = x**(n - 1)
            #xprev, x = x, x - (t*x-y)//(n*t)
            xprev, x = x, ((n - 1)*x + y//t)//n
            #print n, x-xprev, abs(x-xprev) < 2
            if abs(x - xprev) < 2:
                break
    else:
        x = guess
    # Compensate
    t = x**n
    while t < y:
        x += 1
        t = x**n
    while t > y:
        x -= 1
        t = x**n
    return x, t == y
def integer_nthroot ( y , n ) : y , n = int ( y ) , int ( n ) if y < 0 : raise ValueError ( "y must be nonnegative" ) if n < 1 : raise ValueError ( "n must be positive" ) if y in ( 0 , 1 ) : return y , True if n == 1 : return y , True if n == 2 : x , rem = mpmath_sqrtrem ( y ) return int ( x ) , not rem if n > y : return 1 , False # Get initial estimate for Newton's method. Care must be taken to # avoid overflow try : guess = int ( y ** ( 1. / n ) + 0.5 ) except OverflowError : exp = _log ( y , 2 ) / n if exp > 53 : shift = int ( exp - 53 ) guess = int ( 2.0 ** ( exp - shift ) + 1 ) << shift else : guess = int ( 2.0 ** exp ) #print n if guess > 2 ** 50 : # Newton iteration xprev , x = - 1 , guess while 1 : t = x ** ( n - 1 ) #xprev, x = x, x - (t*x-y)//(n*t) xprev , x = x , ( ( n - 1 ) * x + y // t ) // n #print n, x-xprev, abs(x-xprev) < 2 if abs ( x - xprev ) < 2 : break else : x = guess # Compensate t = x ** n while t < y : x += 1 t = x ** n while t > y : x -= 1 t = x ** n return x , t == y