code: def convolution_ntt(a, b, prime):
      """
      Performs linear convolution using Number Theoretic Transform.
  
      Parameters
      ==========
  
      a, b : iterables
          The sequences for which convolution is performed.
      prime : Integer
          Prime modulus of the form `(m 2^k + 1)` to be used for performing
          **NTT** on the sequence.
  
      Examples
      ========
  
      >>> from sympy.discrete.convolutions import convolution_ntt
      >>> convolution_ntt([2, 3], [4, 5], prime=19*2**10 + 1)
      [8, 22, 15]
      >>> convolution_ntt([2, 5], [6, 7, 3], prime=19*2**10 + 1)
      [12, 44, 41, 15]
      >>> convolution_ntt([333, 555], [222, 666], prime=19*2**10 + 1)
      [15555, 14219, 19404]
  
      References
      ==========
  
      .. [1] https://en.wikipedia.org/wiki/Convolution_theorem
      .. [2] https://en.wikipedia.org/wiki/Discrete_Fourier_transform_(general%29
  
      """
  
      a, b, p = a[:], b[:], as_int(prime)
      n = m = len(a) + len(b) - 1  # convolution size
  
      if n > 0 and n & (n - 1):  # not a power of 2
          n = 2 ** n.bit_length()
  
      # padding with zeros
      a += [0] * (n - len(a))
      b += [0] * (n - len(b))
  
      a, b = ntt(a, p), ntt(b, p)
      a = [x * y % p for x, y in zip(a, b)]
      a = intt(a, p)[:m]
  
      return a
  
file_path: sympy/sympy/discrete/convolutions.py
imports: from sympy.core import S, sympify, Rational
  from sympy.core.function import expand_mul
  from sympy.discrete.transforms import fft, ifft, ntt, intt, fwht, ifwht, mobius_transform, inverse_mobius_transform
  from sympy.external.gmpy import MPZ, lcm
  from sympy.utilities.iterables import iterable
  from sympy.utilities.misc import as_int
label_desc: Use image node_id 3 for calling a global function with example usage: convolution_ntt(a, b, prime) and returns: a