Msvcrt.dll использует линейный конгруэнтный генератор для своей функции rand ()? - PullRequest
0 голосов
/ 19 декабря 2009

Я пытаюсь предсказать вывод программы, которая использует функцию msvcrt rand () для генерации грани трех кубиков. Я считаю, что код что-то вроде: dice[0] = rand() % 6 + 1; dice[1] = rand() % 6 + 1; dice[2] = rand() % 6 + 1;, и мне было интересно, могу ли я использовать программу прогнозирования для линейных конгруэнтных генераторов, чтобы предсказать следующие числа в последовательности.

Ответы [ 2 ]

4 голосов
/ 19 декабря 2009

Убедитесь сами: C:\Program Files\Microsoft Visual Studio 8\VC\crt\src\rand.c

(Или используйте %VCINSTALLDIR%\crt\src\rand.c, если вы работаете из командной строки VC.)

(Предполагается, что у вас как минимум стандартная версия VC. Это две строки. Я бы опубликовал это, но не уверен, позволяет ли лицензия.)

1 голос
/ 19 декабря 2009

Если память служит, да, это линейный конгруэнтный генератор - но он возвращает остаток от большего вывода, что увеличивает сложность прогнозирования следующего числа (до такой степени, что вам, вероятно, потребуется гораздо большая выборка, чем три выходы так делать надежно).

...