实现用于伪随机数生成的线性同余生成器的 Java 程序
线性同余法是一类伪随机数发生器(PRNG)算法,用于生成特定范围内的类随机数序列。这种方法可以定义为:
x【I+1】= ax【I】+c mod m
哪里,
x,是伪随机数的序列
m,(> 0)为模数
a,(0,m)乘数
c,(0,m)增量
X0,[0,m]–称为种子的序列初始值
注意: m、a、c、X0 要适当选择,得到一个几乎等于 m 的周期。
- 对于 a = 1,它将是加法同余法。
- 对于 c = 0,将是乘法同余法。
进场:
- 选择种子值 X0、模数参数 m、乘数项 a 和增量项 c
- 初始化生成随机数所需的数量(比如,一个整数变量 noOfRandomNums)。
- 定义存储以保持生成的随机数(这里考虑的是矢量)的大小不变。
- 用种子值初始化向量的第 0 个索引。
- 对于其余的索引,遵循线性同余法生成随机数。
randomNums[i] = ((randomNums[i – 1] * a) + c) % m
- 最后,返回随机数。
以下是上述方法的实现:
Java 语言(一种计算机语言,尤用于创建网站)
// Java implementation of the above approach
import java.util.*;
class GFG {
// Function to generate random numbers
static void lcm(int seed, int mod, int multiplier,
int inc, int[] randomNums,
int noOfRandomNum)
{
// Initialize the seed state
randomNums[0] = seed;
// Traverse to generate required
// numbers of random numbers
for (int i = 1; i < noOfRandomNum; i++) {
// Follow the linear congruential method
randomNums[i]
= ((randomNums[i - 1] * multiplier) + inc)
% m;
}
}
// Driver code
public static void main(String[] args)
{
// Seed value
int seed = 5;
// Modulus parameter
int mod = 7;
// Multiplier term
int multiplier = 3;
// Increment term
int inc = 3;
// Number of Random numbers
// to be generated
int noOfRandomNum = 10;
// To store random numbers
int[] randomNums = new int[noOfRandomNum];
// Function Call
lcm(seed, mod, multiplier, inc, randomNums,
noOfRandomNum);
// Print the generated random numbers
for (int i = 0; i < noOfRandomNum; i++) {
System.out.print(randomNums[i] + " ");
}
}
}
Output
5 4 1 6 0 3 5 4 1 6
伪的字面意思是假的或想象的。这些随机数被称为伪随机数,因为使用了一些已知的算术过程来生成它们。即使生成的序列形成一个模式,因此生成的数字看起来是随机的,但可能不是真正随机的。
版权属于:月萌API www.moonapi.com,转载请注明出处