Suppose we know in advance that we will have N independent processes and that we will need N independent streams of random numbers. Then the best strategy for using an LCG is to split its period into nonoverlapping segments, each of which will be accessed by a different process. This amounts to finding N seeds which are known to be far apart on the cycle produced by the LCG. To find such seeds, first consider (for c = 0), the LCG rule successively applied:
Thus we can ``leap ahead'' k places of the period
by multiplying the current seed value by mod m.
For our purposes, we would like N starting seeds,
spaced at roughly
steps apart.
Since k is likely to be quite large, it is not
practical to compute
one step at a time.
Instead we compute an
-long array,
,
the power-of-two powers of a:
where is the largest power-of-two power of a that
is still smaller than k. I.e. L is the integer part of
the log (base 2) of a.
For example, assume that
(very small, but big
enough to show how it works).
Then
and since 91 = 64 + 16 + 8 + 2 + 1, then