我正在尝试为一个示例问题集实现一个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
答案 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
,modc
“。< / p>
请注意我的重点。你丢弃了m
(x
)的当前值,然后在下一次迭代中使用等式中的“迭代计数器变量”。
将循环更改为
result