Генератор случайных чисел

Линейный конгруэнтный генератор

Не обладает криптографичемкой стойкостью, но полезен в простых случаях.

$$X_{n+1} = (a X_n + c)~~\%~~m,$$ где $m$ — количество значений из которых формируется последовательность $(2 \leqslant m)$, $\%$ — остаток от деления, $a$ — множитель $(0 \leqslant a < m)$, $c$ — приращение $(0 \leqslant c < m)$, $X_{0}$ — начальное значение $(0 \leqslant X_{0} < m)$.

Пример использования

long seed = 1L;
long a = 25214903917L;
long c = 11L;
long m = (long) Math.pow(2, 48);
Stream<Long> stream = Stream.iterate(seed, x -> (a*x + c) % m);
stream.limit(11).skip(1).forEach(System.out::println);

Первые 10 чисел:

25214903928
206026503483683
245470556921330
105707381795861
-57898044054788
102497929776471
-194212777388010
266094224901481
-237412980546624
-133636318119733