code: def nthroot_fixed(y, n, prec, exp1):
      start = 50
      try:
          y1 = rshift(y, prec - n * start)
          r = MPZ(int(y1 ** (1.0 / n)))
      except OverflowError:
          y1 = from_int(y1, start)
          fn = from_int(n)
          fn = mpf_rdiv_int(1, fn, start)
          r = mpf_pow(y1, fn, start)
          r = to_int(r)
      extra = 10
      extra1 = n
      prevp = start
      for p in giant_steps(start, prec + extra):
          pm, pe = int_pow_fixed(r, n - 1, prevp)
          r2 = rshift(pm, (n - 1) * prevp - p - pe - extra1)
          B = lshift(y, 2 * p - prec + extra1) // r2
          r = (B + (n - 1) * lshift(r, p - prevp)) // n
          prevp = p
      return r
  
imports: import math
  from bisect import bisect
  from .backend import xrange
  from .backend import MPZ, MPZ_ZERO, MPZ_ONE, MPZ_TWO, MPZ_FIVE, BACKEND
  from .libmpf import round_floor, round_ceiling, round_down, round_up, round_nearest, round_fast, ComplexResult, bitcount, bctable, lshift, rshift, giant_steps, sqrt_fixed, from_int, to_int, from_man_exp, to_fixed, to_float, from_float, from_rational, normalize, fzero, fone, fnone, fhalf, finf, fninf, fnan, mpf_cmp, mpf_sign, mpf_abs, mpf_pos, mpf_neg, mpf_add, mpf_sub, mpf_mul, mpf_div, mpf_shift, mpf_rdiv_int, mpf_pow_int, mpf_sqrt, reciprocal_rnd, negative_rnd, mpf_perturb, isqrt_fast
  from .libintmath import ifib
label_desc: Use image node_id 18 for calling a global function with example usage: nthroot_fixed(y, n, prec, exp1) and returns: r