Ответ 1
Это тот же принцип, что и генераторы псевдослучайных чисел, как намекнул Джаспер, а именно линейные конгруэнтные генераторы. Линейный конгруэнтный генератор представляет собой последовательность, которая следует за соотношением X_(n+1) = (a * X_n + c) mod m
. На странице wiki
Период общего LCG не более m, а для некоторых вариантов коэффициента намного меньше этого. LCG будет иметь полный период для всех значений семени тогда и только тогда, когда:
m
иc
являются взаимно простыми.a - 1
делится на все простые множителиm
.a - 1
делится на 4, еслиm
делится на4
.
Ясно, что 5 - наименьшее a
для удовлетворения этих требований, а именно
- 2 ^ я и 1 взаимно просты.
- 4 делится на 2.
- 4 делится на 4.
Также интересно, что 5 - не единственное число, удовлетворяющее этим условиям. 9 также будет работать. Принимая значение m
равным 16, использование j=(9*j+1)%16
дает
0 1 10 11 4 5 14 15 8 9 2 3 12 13 6 7
Доказательство этих трех условий можно найти в оригинальной статье Халла-Добелла на стр. 5, а также множество других связанных с PRNG теорем, которые также могут представляют интерес.