161803398是一个“特殊”数字吗

我怀疑答案是“ 因为数学”,但我希望有人能在基本水平上给出更多的见解... ..。

今天我浏览了 BCL 源代码,看看我之前使用的一些类是如何实现的。我以前从来没有想过如何生成(伪)随机数,所以我决定看看它是如何做到的。

完整来源: http://referencesource.microsoft.com/#mscorlib/system/random.cs#29

private const int MSEED = 161803398;

此 MSEED 值在每次为 Random ()类接种时使用。

不管怎样,我看到了这个“神奇的数字”——161803398——而且我一点也不知道为什么这个数字会被选中。它不是质数,也不是2的幂。这不是一个似乎更有意义的数字的“一半”。我用二进制和十六进制的方式看,它看起来就像一个数字。

我试着在谷歌上搜索这个号码,但是一无所获。

10391 次浏览

不,但它是基于 Phi (“黄金分割率”)。

161803398 = 1.61803398 * 10^8 ≈ φ * 10^8

更多关于黄金比率的信息请点击这里。

对于一个随意的数学家来说,真的是一个很好的读物。

我发现 一篇关于随机数生成器的研究论文也同意这种说法(见第53页)

这个数字取自 黄金分割比率 1.61803398 * 10 ^ 8。Matt 给出了一个很好的答案,这个数是多少,因此我将解释一下算法。

这不是这个算法的特殊数字,算法是 Knuth 的减法随机数生成算法,它的要点是:

  • 存储一个由56个随机数组成的循环列表
  • 初始化是一个填充列表的过程,然后用一个特定的确定性算法随机化这些值
  • 两个指数保持在31之间
  • 新的随机数是两个值在两个指数上的差
  • 在列表中存储新的随机数

生成器基于以下递归: XN = (XN-55-XN-24) mod m,其中 n & geq; 0。这是 滞后斐波那契数发生器的部分情况: XN = (XN-J@XNK) mod m,其中0 < k < j 和@是任何二元运算(减法,加法,xor)。

这个生成器有几个实现 我在他的书中发现了以下 密码,并附有如下评论:

参数(MBIG = 1000000000,MSEED = 161803398,MZ = 0,FAC = 1.E-9)

根据 到 Knuth,任何大的 MBIG 和任何小的(但仍然大的) MSEED 都可以 取代以上数值。

更多一点可以找到 给你注意,这实际上不是一篇研究论文(数学) ,这只是一个硕士学位论文。

研究密码学的人喜欢使用无理数(piesqrt(5)) ,因为有一种猜测认为,这些数字的数字出现的频率相同,因此具有较高的 。你可以在 安全堆栈交换机上找到这个相关的问题来学习更多关于这些数字的知识。这里有一句话:

“如果这些常数是随机选择的,那么很有可能,不 攻击者将能够破解它。”但密码学家,作为一个 当有人说,“让我们用这套 所以作为一种妥协, 他们会使用像 π 的二进制展开这样的常数 不再有数学上的好处 随机从一些大的数字池,我们至少可以更多 确信没有人蓄意破坏。