如何使用线性同余生成器
How to use Linear congruential generator
我必须在 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()
LCG是一种常用的伪随机数生成算法。你不能使用 m=6 否则你的 LCG 周期会很低。您需要使用 精心选择 的 a、b 和 m 值,以确保 LCG 没有小的周期性。
你可以使用 a=1664525, b=1013904223, m=2**32
这将产生伪随机整数,你可以得到一个骰子:
骰子 = 1 + lcg(a,b,m) % 6
我必须在 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()
LCG是一种常用的伪随机数生成算法。你不能使用 m=6 否则你的 LCG 周期会很低。您需要使用 精心选择 的 a、b 和 m 值,以确保 LCG 没有小的周期性。
你可以使用 a=1664525, b=1013904223, m=2**32
这将产生伪随机整数,你可以得到一个骰子:
骰子 = 1 + lcg(a,b,m) % 6