【发布时间】:2023-03-05 07:08:01
【问题描述】:
我要做的是从现有的 56+ 个随机整数序列中预测 System.Random 生成的一系列整数中的下一个数字。
我知道System.Random 使用 D. E. Knuth 书中的减法算法,并且给定最后 55 个整数,序列中的下一个整数将是:
seq[n] = (seq[n-55] - seq[n-24]) % m
所以我尝试填充一个随机列表并用蛮力找到m。
var rnd = new Random();
var list = new List<int>();
for(var i=0; i< 56; i++)
list.Add(rnd.Next());
var n1 = list[0];
var n2 = list[31];
var n = list[55];
Console.WriteLine("{0} = ({1} - {2}) % m", n, n1, n2);
for(var i = 1; i< int.MaxValue; i++)
{
if (n == (n1 - n2) % i)
Console.WriteLine("m = {0}", i);
}
它没有工作。然后我注意到System.Random 实现中明显的bug,他们使用34 而不是24。我也尝试过,再次没有运气。
如果有人能告诉我我在这里做错了什么,我将不胜感激。
【问题讨论】:
-
"...基于 Donald E. Knuth 的减法随机数生成算法的修改版本..." msdn.microsoft.com/en-us/library/system.random(v=vs.110).aspx