我想要做的是预测由System.Random
生成的一系列整数中的下一个数字,这些整数是从现有的56+随机整数序列中生成的。
我知道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
实现中存在一个明显的漏洞,他们使用了34而不是24。我也尝试了那个,但还是没有运气。
如果有人能告诉我我做错了什么,我将不胜感激。