Использует ли msvcrt.dll линейный конгруэнтный генератор для своей функции rand()?
Вопрос
Я пытаюсь предсказать выходные данные программы, которая использует функцию rand() msvcrt для генерации граней трех игральных костей.Я считаю, что код выглядит примерно так:dice[0] = rand() % 6 + 1; dice[1] = rand() % 6 + 1; dice[2] = rand() % 6 + 1;
, и мне было интересно, смогу ли я использовать программу прогнозирования для линейных конгруэнтных генераторов, чтобы предсказывать следующие числа в последовательности.
Решение
Посмотреть на себя: C:\Program Files\Microsoft Visual Studio 8\VC\crt\src\rand.c
(Или используйте %VCINSTALLDIR%\crt\src\rand.c
если вы работаете из командной строки VC.)
(Предполагая, что у вас есть по крайней мере стандартная версия из ВК.Это две линии.Я бы разместил это, но не уверен, позволяет ли это лицензия.)
Другие советы
Если память не изменяет, да, это линейный конгруэнтный генератор, но он возвращает остаток от большего результата, что увеличивает сложность прогнозирования следующего числа (до такой степени, что вам, вероятно, понадобится гораздо большая выборка, чем три выхода, чтобы сделать так надежно).