使用相同System.Random算法的线性伪随机生成

时间:2012-01-01 11:26:40

标签: c# .net algorithm random

有没有办法预测一些Random类而不经过rnd.NextDouble()循环?

我现在正在使用此代码:

Random rnd = new Random(SOME_STATIC_SEED);

//I need to get the 1000000'th random number:
for (ulong i = 0; i < 1000000; i++) 
//I need to avoid this loop and get the result in a linear time!
{
      rnd.NextDouble();
}
double iNeedThisNumber = rnd.NextDouble();

如何在没有循环的情况下获得它?我需要使用.Net的System.Random类算法给出相同的确切数字。


据称已经解决了:

这是我的代码!!

public static ulong GetNumberFromSequence(int seq) 
{ 
    Random rnd = new Random(seq); 
    return (ulong)(rnd.NextDouble() * 99999999999999) ^ (ulong)seq; 
}

2 个答案:

答案 0 :(得分:1)

看看这是否适合你

在随机数生成器中使用种子作为所需索引,然后选择第一个生成的数字。

Random rnd = new Random(required_index_as_seed).Next();
double iNeedThisNumber = rnd.NextDouble();

答案 1 :(得分:0)

您可以预先计算给定种子的值并将其缓存在列表或数据库中,也可以使用可以在线性时间内生成索引值的备用伪随机数生成器。