为什么我的数学不能加入我的LCG?

时间:2017-09-18 23:48:08

标签: java 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 五 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

1 个答案:

答案 0 :(得分:1)

这似乎只是对迭代的误解。它似乎不是方程式的问题,而是你对方程的结果所做的。

我将 function addStock(event) { var element = event.target; var symbol = element.getAttribute("symbol"); if (confirm("Add Symbol to Watchlist " + symbol + "?")) { $.post("watchlistinsert.php?symbol="+ symbol +"&price=25&watchlistgroupid=1"); document.location.reload(); console.log("item " + symbol + " added"); } else { console.log("user canceled"); } return; } 视为

  

x的下一个值将是 当前值Xn+1 = (aXn + c) mod m ,加上x,mod c“。< / p>

请注意我的重点。你丢弃了mx)的当前值,然后在下一次迭代中使用等式中的“迭代计数器变量”。

将循环更改为

result