📜  用于实现伪随机数生成的线性同余生成器的Java程序

📅  最后修改于: 2022-05-13 01:54:26.192000             🧑  作者: Mango

用于实现伪随机数生成的线性同余生成器的Java程序

线性同余方法是一类伪随机数生成器 (PRNG) 算法,用于生成特定范围内的类随机数序列。该方法可以定义为:

  • 对于 a = 1,它将是加法同余法。
  • 对于 c = 0,它将是乘法同余法。

方法:

  • 选择种子值 X0、模量参数 m、乘数项 a 和增量项 c。
  • 初始化所需数量的随机数以生成(例如,整数变量 noOfRandomNums)。
  • 定义存储以保留生成的大小为 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] + " ");
        }
    }
}


输出
5 4 1 6 0 3 5 4 1 6

伪的字面量意思是假的或虚构的。这些随机数被称为伪数,因为使用了一些已知的算术程序来生成它们。即使生成的序列也形成一个模式,因此生成的数字似乎是随机的,但可能不是真正的随机。