Подтвердить что ты не робот

Какая польза от посева генератора случайных чисел только с простыми числами?

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

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

EDIT:

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

ДАЛЬНЕЙШЕЕ ИЗДАНИЕ:

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

4b9b3361

Ответ 1

Хорошо, мигание при реализации показало бы вам, что он НЕ МОЖЕТ иметь никаких оснований для этого требования вообще. Зачем? Потому что это выглядит так:

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

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

Java использует обычный метод линейной конгруэнтности, т.е.:

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

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

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

Ответ 2

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

Ответ 3

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