为什么不将素数用于随机数生成器?

时间:2011-12-25 14:28:02

标签: math random

我并不确定rng目前是如何工作的,但我知道他们将时间用作种子...那么,为什么不每次只使用不同的素数呢?据我所知,素数是我们所知道的唯一实际随机事物,例如,每当一个程序要求一个随机数时,你给他第n个素数并将n增加一个。这不是纯粹的随意吗?因为第n和第n + 1之间的差异是!

2 个答案:

答案 0 :(得分:1)

除了增加使用程序运行时指数生成数字的时间外,这会实现什么?

质数可能是随机的..但是给定相同的数量N i仍然会产生相同的第n + 1个素数 - 因此我们当前的伪随机算法没有差别,但产生第n + 1个素数的停机时间并不是恒定的时间运作。

将时间用作种子是使确定性快速算法看起来随机的非常方便的方法。但它不是,你提出的方法也不是。

将时间视为你的n并且两者的工作方式基本相同。

答案 1 :(得分:1)

好主意,但这种构建伪随机数生成器的方法存在两个问题。

1] RNG的安全性部分取决于攻击者无法知道所使用的种子。虽然一个素数与下一个素数之间的距离是随机的,但素数序列不是随机的。换句话说,3是素数,我无法预测下一个素数将基于3是素数的事实。但我已经知道5是下一个素数(因为所有低数素数都是已知的)。根据你的算法,如果我确定最后一个随机数的种子是3,然后是5,我可以猜测你将使用的下一个种子将是7.所以这对低素数不起作用。从1到10,006,721的素数列表是众所周知的并且已经发表。

2]找到素数很难(计算成本很高)。虽然对于低数字而言它较便宜,但对于大质数而言它变得非常昂贵。大多数使用随机数的代码都假定系统会非常快速地返回该数字,因此它可用于游戏的紧密循环。该算法将破坏这些用例。

因此,这不是构建随机数生成器的好方法。