1

我试图预测一个程序的输出,该程序使用 msvcrt 的 rand() 函数来生成三个骰子的面。我相信代码类似于: dice[0] = rand() % 6 + 1; dice[1] = rand() % 6 + 1; dice[2] = rand() % 6 + 1;,我想知道是否可以使用线性同余生成器的预测程序来预测序列中的下一个数字。

4

2 回答 2

4

你自己看:C:\Program Files\Microsoft Visual Studio 8\VC\crt\src\rand.c

(或者%VCINSTALLDIR%\crt\src\rand.c,如果您从 VC 命令提示符运行,则使用。)

(假设您至少有标准版本的 VC。这是两行。我会发布它,但不确定许可证是否允许。)

于 2009-12-19T01:51:26.780 回答
1

如果记忆有用,是的,它是一个线性同余生成器——但它返回的是更大输出的剩余部分,这增加了预测下一个数字的难度(以至于你可能需要比三个输出更大的样本来做如此可靠)。

于 2009-12-19T02:08:17.947 回答