问题
I am trying to predict the output of a program that uses msvcrt's rand() function for generating the face of three dice. I believe the code is something like:
dice[0] = rand() % 6 + 1; dice[1] = rand() % 6 + 1; dice[2] = rand() % 6 + 1;
, and I was wondering if I could use a prediction program for linear congruential generators to predict the next numbers in the sequence.
回答1:
See for yourself: C:\Program Files\Microsoft Visual Studio 8\VC\crt\src\rand.c
(Or use %VCINSTALLDIR%\crt\src\rand.c
if you're running from a VC command prompt.)
(Assuming you have at least the standard version of VC. It's two lines. I'd post it, but not sure whether the license allows it.)
回答2:
If memory serves, yes it's a linear congruential generator -- but what it returns is the remainder of a larger output, which increases the difficulty of predicting the next number (to the point that you probably need a much larger sample than three outputs to do so dependably).
来源:https://stackoverflow.com/questions/1931656/does-msvcrt-dll-use-a-linear-congruential-generator-for-its-rand-function