I want to generate numbers in the range $0 \leq n < 2000$ in a random order. The risk of using "generic random number generator" $\mod 2000$ is that it will cycle sooner in that range, or generate many repeated values in that range before generating new values.
How can I design a pseudorandom function that returns all of the numbers in its range over as small a domain as possible?
Ideally, $f(x)$ would be bijective for some domain $k ≤ x < k+2000$, but that may be hard to achieve, so what are some good techniques to get close to that?