Бесплатное умножение на период переноса - PullRequest
2 голосов
/ 23 апреля 2011

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

На странице википедии есть несколько примеров периода различных параметров как для стандартного MWC, так и для CMWC, но на самом деле не дается ответ, как это рассчитывается.

Есть ли простой способ рассчитать это для данного множителя, числа семян и основания b?

Например, скажем, у меня есть следующие параметры (для CMWC):

b=2^32-1
a=4294966362
r=32

Я убедился, что p=a*b^r+1 простое число.

edit: упс, скопировано неверное значение. Исправлено, теперь p должно быть простым.

Ответы [ 2 ]

1 голос
/ 09 января 2012

b является примитивным корнем, когда его порядок равен p-1, поэтому b ^ k может принимать любое значение от 1 до p-1, в зависимости от значения k.

Порядок элемента равенминимум s с b ^ s = 1 (мод р).b является примитивным корнем тогда и только тогда, когда b ^ (phi (p) / k)! = 1 (! = означает различное) для каждого k делителя phi (p) и phi (p) = (p-1) - это функция Эйлера (http://en.wikipedia.org/wiki/Euler%27s_totient_function).

В вашем примере:
- phi (p) = a * b ^ r = p - 1.
- Делителями a являются {1, 2, 3, 31, 23091217, 4294966362}.
- Делителями b являются {1, 3, 5, 17, 257, 65537, 4294967295}.

Итак, (p-1) = 2 * (3^ 33) * (5 ^ 32) * (17 ^ 32) * 31 * (257 ^ 32) * (65537 ^ 32) * 23091217.
p-1 имеет 322 570 512 делителей (http://en.wikipedia.org/wiki/Divisor_function)

с модульнымВ возведенном в степень, можно увидеть, что b ^ ((p-1) / 3) = 1 (mod p), поэтому порядок b отличается от p-1.

Лучше выбрать числа a и b с несколькими делителями, тогда p-1 также будет иметь несколько делителей, и будет легко вычислить (phi (p) / k) для каждого делителя k. Порядок bбудет min {phi (p) / k} = min {(p-1) / k}.

В статье Марсаглии "О случайности числа Пи и других десятичных разложений" (http://interstat.statjournals.net/YEAR/2005/articles/0510005.pdf), есть некоторыеЗначения а, б и т. Периоды, которые птакже не полностью пригодился (см. статью).

База b = 2 ^ 32 не имеет полного периода, но возвращает целые числа от 0 до 2 ^ 32-1.База b = 2 ^ 32-1 не может вернуть несмещенные 32-битные целые числа (никогда не вернется число 2 ^ 31-1 = 4294967295).

0 голосов
/ 29 апреля 2011

Я неправильно понял, что требуется для получения полного периода:

b также должен быть примитивным корнем из p, что я не думаю, что дело здесь (честно говоря, у меня нет математического фона, чтобы даже начать понимать, что такое примитивный корень ). Если есть полный период, период будет a*b^r. Насколько я могу судить, невозможно (или, по крайней мере, очень трудно) определить, каким будет период в противном случае (и, честно говоря, это бесполезно, поскольку на практике желателен полный период).

Источник: Журнал современных прикладных статистических методов

...