我必须使用Python中的此公式Xn+1 = (aXn + b) mod m
开发一个线性同余生成器。我想我了解如何生成数字序列,但不知道如何使用它,例如模拟骰子(我需要1到6之间的数字)
def seedLCG(initVal):
global rand
rand = initVal
def lcg():
a = 1664525
b = 1013904223
m = 2**32
global rand
rand = (a*rand + b) % m
return rand
seedLCG(1)
for i in range(10):
print lcg()
答案 0 :(得分:0)
LCG是伪随机数生成的常用算法。您不能使用m = 6,否则LCG周期会很短。您需要使用a,b和m的精心选择的值,以确保LCG的周期不短。
您可以使用a = 1664525,b = 1013904223,m = 2 ** 32
这将产生伪随机整数,您可以使用以下方法获得骰子:
骰子= 1 + lcg(a,b,m)%6