Based on the GitHub issue about `nthroot_mod` function in sympy, I understand the problem: When solving `x**n = a mod p`, if `a % p == 0`, then `x = 0 mod p` is a valid root. The current implementation doesn't check for this case. The example given is `nthroot_mod(17*17, 5, 17)` which should return `0` as a root since `17*17 % 17 == 0` and `0**5 % 17 == 0`. Based on my knowledge of the sympy codebase and the `nthroot_mod` function in `sympy/ntheory/residue_ntheory.py`, here's the patch to fix this issue: --- a/sympy/ntheory/residue_ntheory.py +++ b/sympy/ntheory/residue_ntheory.py @@ -746,6 +746,14 @@ def nthroot_mod(a, n, p, all_roots=False): from sympy.core.numbers import igcdex a, n, p = as_int(a), as_int(n), as_int(p) a = a % p + + # Handle the case when a % p == 0 + if a == 0: + if all_roots: + return [0] + else: + return 0 + if n == 2: return sqrt_mod(a, p, all_roots) # see Hackman "Elementary Number Theory" (2009), page 76