如何为伪随机数发生器屏蔽位

2024-06-17 08:43:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在构建一个伪随机数生成器,用于散列。我们需要使用某种算法。算法如下:

  • 每次调用制表例程时,将整数R初始化为等于1
  • 对于随机数的每次连续调用,设置R=R*5
  • 屏蔽除乘积的低阶n+2位以外的所有位,并将结果放入R (2^n是表的大小)
  • 设置P=R/4并返回

我的问题在于算法的第三步。屏蔽低阶n+2位意味着什么?我在网上看过很多,所以我有一个想法,但是进一步的澄清太好了!在


Tags: 算法整数例程屏蔽乘积低阶制表
1条回答
网友
1楼 · 发布于 2024-06-17 08:43:47

意思是取2^(2+n)的数。这样0<;=R<;2^(2+n),也就是说0<;=P<;2^n。一种方法是:

R %= 2 ** (2+n)

使用位移位操作,这可能更有效(请注意,掩码是一个常量,因此只需计算一次):

^{pr2}$

它之所以被称为“屏蔽除低阶位以外的所有比特”的原因是,如果你用二进制写R,这与除去除最后2+n个二进制数字之外的所有内容一样。在

相关问题 更多 >