我使用Python来实现以下等式:
S [n + 1] =(k * S [n])MOD m变量的值为:S [0] = 1111 k = 16807 m = 2147483647我计算了10000个值(所以S [0]为 S [9999])。
我正在使用列表来计算和追加值。 这就是我在做的事情:
# Respective values of k, m and Seed value S[0] in sList
k = 16807
m = 2147483647
sList = [1111]
# Populating the list/array for 10000 iterations
while len(sList) < 10000:
Sn = (k * sList[-1]) % m
sList.append(Sn)
print (sList)
虽然代码适用于较小的k和m值,但我得到的结果不正确S [2]。 我手动计算S [2] = 1417880224,但我的代码生成S [2] = 297389177。
这是否发生是因为我试图在列表中追加的数字超出了某个范围?我是否需要键入强制转换为不同的数据类型(如double)? 我哪里错了?
答案 0 :(得分:3)
让我们使用您的定义calculator:
手动完成>>> 1111
1111
>>> (16807 * 1111) % 2147483647
18672577
>>> (16807 * 18672577) % 2147483647
297389177
这些与您的代码产生的结果相同。
所以,看起来你手工计算或你提供的递归公式是错误的。