Java 为什么';我的数学在我的LCG里加起来了吗?
例如: 我正在尝试为一个示例问题集实现LCG,但它对我不起作用,我似乎不明白为什么 方程是直接的:Xn+1=(aXn+c)mod m 根据上述参考资料: 例如,当X0=a=c=7,m=10时获得的序列为 7,6,9,0,7,6,9,0 用java实现这一点,例如-Java 为什么';我的数学在我的LCG里加起来了吗?,java,lcg,Java,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 (in
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);
}
公共静态无效lcg(){
INTA=7;
int c=7;
int m=10;
int x0=7;
int N=10;
对于(int x=x0;x
我得到输出:
6.
3.
0
7.
4.
1.
8.
5.
2.
九,
而不是预期的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
as
x的下一个值将是x
的当前值,加上c
,modm
”
请注意我的重点。您正在丢弃当前值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
for(int x=x0,i=0;i<5;i++){
//注x正在更新
x=(a*x+c)%m;
系统输出打印(x);
}
69076
“我在纸上得到了相同的结果”。你是说当你在纸上完成时,你会得到与程序相同的结果,还是与预期的答案相同?这看起来像是一次迭代。难道不是x
应该成为上一次迭代的结果吗?或者使用类似的for(int I=0;I
并在循环之前将x
初始化为x0
。@msandiford更新谢谢。是的,很明显我误解了公式,因为我是对一个系列应用函数,而不是对结果进行迭代。@BrianJackson没问题。当我需要理解方程或调试问题时,我喜欢大声说出方程。这是正确的经常暴露出误解。