В чем преимущество заполнения генератора случайных чисел только простыми числами? - PullRequest
29 голосов
/ 16 марта 2011

Проводя некоторые эксперименты на Java, мой руководитель проекта напомнил мне начинать каждую итерацию эксперимента с другим номером. Он также упомянул, что я должен использовать простые числа для начальных значений. Это заставило меня задуматься - почему простые числа? Почему не любой другой номер как семя? Кроме того, почему простое число должно быть достаточно большим? Есть идеи? Я бы спросил его об этом сам, но сейчас здесь 4 часа утра, все спят, я только что вспомнил этот вопрос, и я горю, чтобы узнать ответ (я уверен, что вы знаете это чувство).

Было бы неплохо, если бы вы могли предоставить некоторые ссылки, меня очень интересует математика / концепция всего этого!

EDIT:

Я использую java.util.Random.

ДОПОЛНИТЕЛЬНОЕ РЕДАКТИРОВАНИЕ:

Мой профессор родом из Си, но я использую Java. Не знаю, поможет ли это. Похоже, что использование простых чисел является его особенностью, но я думаю, что мы нашли некоторые интересные ответы о генерации случайных чисел. Спасибо всем за усилия!

Ответы [ 3 ]

23 голосов
/ 17 марта 2011

Что ж, один миг при внедрении показал бы, что у него не может быть никаких причин для такого утверждения вообще.Зачем?Потому что так выглядит функция set seed:

synchronized public void setSeed(long seed) {
    seed = (seed ^ multiplier) & mask;
    this.seed.set(seed);
    haveNextNextGaussian = false;
}

И это именно то, что вызывается из конструктора.Так что даже если вы дадите ему простое число, оно все равно не будет его использовать, поэтому, если вам вообще придется использовать начальное число s, где (s ^ multiplier) & mask дает простое число;)

В Java используется обычный метод линейного сравнения, а именно:

x_n + 1 = (a * x_n + c) mod m с 2 <= a <m;0 <= c <m. </p>

Поскольку вы хотите получить максимальный период, c и m должны быть относительно простыми и иметь несколько других довольно неясных ограничений, а также несколько советов, как получить практически полезную версию.Кнут, очевидно, подробно описывает это в части 2;)

Но, во всяком случае, семя вообще не влияет на качества генератора.Даже если бы в реализации использовался генератор Лемера, он, очевидно, удостоверился бы, что N простое число (в противном случае алгоритм практически бесполезен и не распределено равномерно, если все случайные значения должны быть взаимно простыми с не простыми ставками NI), чтоспорный вопрос

21 голосов
/ 16 марта 2011

Если генератор является генератором Лемера, то семя и модуль должны быть взаимно простыми; см. страницу вики . Один из способов обеспечить их совместное простое число - начать с простого числа.

11 голосов
/ 16 марта 2011

Если вы говорите о java.util.Random или одном из его подклассов во время выполнения Oracle, то для этого нет причин.Это просто прихоть твоего руководителя.

...