为什么我的数学不加在我的 LCG 中?
Why doesn't my math add up in my LCG?
我正在尝试为示例问题集实施 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
我正在尝试为示例问题集实施 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
, plusc
, modm
".
注意我强调的重点。您将丢弃 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