Java 如何确定线性同余生成器中的模?

Java 如何确定线性同余生成器中的模?,java,random,generator,modulus,Java,Random,Generator,Modulus,我的线性同余生成器有一个问题。我有两个模数。如果我替换或移除其中任何一个,我不会得到任何输出,除了在最后启动的计数器,但是如果没有使用计数器处理的输出,那么它是非常无用的 我需要应用程序输出0到9范围内的数字,然后在最后输出数字的分布。这是我的密码: public static void main(String[] args) { int fact; int constant; int modulus; int seed; Scanner scan = new Scanne

我的线性同余生成器有一个问题。我有两个模数。如果我替换或移除其中任何一个,我不会得到任何输出,除了在最后启动的计数器,但是如果没有使用计数器处理的输出,那么它是非常无用的

我需要应用程序输出0到9范围内的数字,然后在最后输出数字的分布。这是我的密码:

public static void main(String[] args) {
  int fact;
  int constant;
  int modulus;
  int seed;

  Scanner scan = new Scanner(System.in);

  System.out.println("Input fact: ");
  fact = scan.nextInt();

  System.out.println("Input constant: ");
  constant = scan.nextInt();

  System.out.println("Input modulus: ");
  modulus = scan.nextInt();

  System.out.println("Input seed: ");
  seed = scan.nextInt();

  int[] arrayBox;
  arrayBox = new int[10];

  for (int i = 0; i < 10; i++) {

    seed = (seed * fact + constant) % modulus; // First modulus

    System.out.println(seed);
    arrayBox[seed % 10] = arrayBox[seed % 10] + 1; // Second modulus
  }

  for (int i = 0; i < 10; i++) {
    System.out.print(+(100 * arrayBox[i] / 10) + "% ");
  }
}
publicstaticvoidmain(字符串[]args){
事实;
int常数;
int模;
int种子;
扫描仪扫描=新扫描仪(System.in);
System.out.println(“输入事实:”);
事实=scan.nextInt();
System.out.println(“输入常数:”);
常数=scan.nextInt();
System.out.println(“输入模数:”);
模数=scan.nextInt();
System.out.println(“输入种子:”);
seed=scan.nextInt();
int[]阵列盒;
arrayBox=新整数[10];
对于(int i=0;i<10;i++){
seed=(seed*事实+常数)%modules;//第一个模数
System.out.println(种子);
arrayBox[seed%10]=arrayBox[seed%10]+1;//第二个模数
}
对于(int i=0;i<10;i++){
系统输出打印(+(100*arrayBox[i]/10)+“%”;
}
}

有没有办法绕过第二个模数,使我的输出和计数器仍在我想要的范围(0到9)内工作?

我有点难以理解您试图做的事情,但我认为您想要的是,在最后:

System.out.println(i + ":\t" + (100*arrayBox[i]/10) + "%");
请注意,此程序不会将实际的
种子值保存到任何位置,因此您将无法查看它们

下面是该程序的一个运行示例,其中包含一些合理的输入参数值:

Input fact: 
257
Input constant: 
31
Input modulus: 
64
Input seed: 
89
56
23
54
21
52
19
50
17
48
15
0:  10%
1:  10%
2:  10%
3:  10%
4:  10%
5:  10%
6:  10%
7:  10%
8:  10%
9:  10%