为什么我的数学不加在我的 LCG 中?

Why doesn't my math add up in my LCG?

例如这里: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

这好像只是对迭代的误解。看起来不是方程的问题,而是你对方程的结果做了什么。

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

The next value of x will be the current value of x, plus c, mod m".

注意我强调的重点。您将丢弃 x (result) 的当前值,然后在下一次迭代中仅使用等式中的 "iteration counter variable"。

将循环更改为

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