0

例如这里: http: //www.math.cornell.edu/~mec/Winter2009/Luo/Linear%20Congruential%20Generator/linear%20congruential%20gen1.html

我正在尝试为示例问题集实施 LCG,但它对我不起作用,我似乎无法弄清楚为什么?

方程很简单:Xn+1 =(aXn + c) mod m

从上面的参考:例如X0 = a = c = 7, m = 10时得到的序列是7, 6, 9, 0, 7, 6, 9, 0, ...

在java中实现这个,例如 -

public static void lcg(){

    int a = 7;
    int c = 7;
    int m = 10;
    int x0 = 7;
    int N = 10;

    for (int x = x0; x < x0+N; x++){

        int result = (a*x + c) % m;

        System.out.println(result);

    }

我得到输出: 6 3 0 7 4 1 8 5 2 9

而不是预期的 7,6,9,0,...

我在纸上得到同样的结果。谁能弄清楚出了什么问题?

同样, a=10, c=7, m=11, x0 = 3 应该给出重复模式 4,3,4,3 但我得到 4 3 2 1 0 10 9 8 7 6

4

1 回答 1

1

这似乎只是对迭代的误解。这似乎不是方程的问题,而是你对方程的结果做了什么。

我读Xn+1 = (aXn + c) mod m

x 的下一个值将是, plus , mod "的当前值。xcm

注意我的重点。您将丢弃x( result) 的当前值,然后在下一次迭代中使用等式中的“迭代计数器变量”。

将循环更改为

for (int x = x0, i = 0; i < 5; i++) {
    // Note x is being updated instead
    x = (a*x + c) % m;

    System.out.print(x);
}

69076
于 2017-09-18T23:57:20.587 回答