def iroot(k, n):
    hi = 1
while pow(hi, k) < n:
    hi *= 2
lo = hi / 2
while hi - lo > 1:
    mid = (lo + hi) // 2
midToK = pow(mid, k)
if midToK < n:
    lo = mid
elif n < midToK:
    hi = mid
else:
    return mid
if pow(hi, k) == n:
    return hi
else:
    return lo
Как найти целые n-е корни?