Crossposted from math.stackexchange, since I'm not getting any answer and I think the question is suitable here.
Given a generating set of a $\mathbb{Z_k}$-module $M \subseteq {\mathbb{Z}_k}^n$, is there an (efficient) known algorithm to compute a generating set of {$u \in {\mathbb{Z}_k}^n : \forall v \in M \quad v \cdot u = 0$}? It is quite simple when $k = p^i$ for a prime $p$ (since it becomes a vector space), but I have no clue what to do when $k$ is composite.