7

我正在寻找一个 int32->int32 函数

  • 双射(一一对应)
  • 至少在一个方向上计算便宜
  • 将递增的序列 0, 1, 2, 3, ... 转换为看起来像一个很好的伪随机序列的序列(当参数变化很小时,~半位翻转,没有明显的模式)
4

2 回答 2

10

乘以一个大的奇数并与一个不同的数异或。

双射:奇数的乘法逆模幂为 2,因此乘法通过乘以逆来取消。当然,xor 会被另一个 xor 撤销。

这基本上就是线性同余伪随机数生成器的工作原理。

于 2013-03-20T20:29:15.167 回答
3

对于这项任务来说可能有点过头了,但是您是否考虑过应用任何来自分组密码的加密伪随机排列或其他原语。例如,可以在计数器模式下使用带有已知键的 des 来完成:

younumber xor (des (key, number counter))
于 2013-03-20T21:19:21.420 回答