使用中平方法在 Java 中生成随机数

2025 年 1 月 6 日 | 阅读 4 分钟

计算随机数被认为是任何计算机应用程序的基本要求之一,它被用于密码学、模拟和游戏等领域。随机数是不能由先前的事件确定的实数,而伪随机数是通过确定性方法生成的,并且几乎是随机的。中位数平方数法是开发伪随机数近似值的最古老的方法之一。

中位数平方数法约翰·冯·诺依曼于1949年首次定义,在概念上非常简单但历史悠久。在这种模式下,一个人将一个数字平方,并使用平方结果的中间两个数字作为序列中的下一个数字。然而,上述方法并非没有缺点,一旦开始就很容易陷入负循环,或者变成零和博弈。尽管如此,它在学习随机数生成的初步概念时很有帮助。

如何使用中位数平方数法?

从种子开始:第一个操作规定种子必须是正整数,并且必须包含偶数位数。

平方种子:将种子乘以自身。

提取中间数字:下一个数字是通过从平方结果中选取中间数字获得的。

重复:将提取的数字作为新的种子,或简单地重复整个过程。

例如,如果我们从种子1234开始

平方它 1234*1234=1522756

提取中间4位数字 2275

这意味着使用2275作为新种子并再次循环。

文件名:MiddleSquareMethod.java

输出

5227
3215
3362
3030
1809
2724
4201
6484
422
1780
241383
265752
624125
532015
39960
596801
171433
389273
533468
588107

解释

它包含一个名为MiddleSquareMethod的类,其构造函数带有一个'seed'参数来设置生成序列的初始值,以及一个名为'next()'的方法来生成序列中的下一个值。它必须是一个正整数,并且种子的位数必须是偶数。

下一个过程有一个参数numDigits,它定义了从种子的平方中应取多少个中间数字。该值被平方,并且结果值被用数字零进行词法左填充,使其至少有2*numDigits位长。然后提取中间数字并用作新种子。然后提取它们用作新种子。

主方法通过创建并显示十个随机数来说明该类的用法,其中中间数字分别为4和6,种子分别为1234和123456。如果输入了不正确的种子或数字位数,将出现IllegalArgumentException并被捕获,显示错误消息。