Typical periods for the random generators provided in the program library are of the order of \( \sim 10^9 \) or larger. Other random number generators which have become increasingly popular are so-called shift-register generators. In these generators each successive number depends on many preceding values (rather than the last values as in the linear congruential generator). For example, you could make a shift register generator whose $l$th number is the sum of the $l-i$th and $l-j$th values with modulo \( M \), $$ \begin{equation*} N_l=(aN_{l-i}+cN_{l-j})\mathrm{MOD}(M). \end{equation*} $$