0

我必须用Xn+1 = (aXn + b) mod mPython 中的这个公式开发一个线性同余生成器。我想我了解如何生成数字序列但我不知道如何使用它,例如模拟骰子(我需要一个介于 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()
4

1 回答 1

0

LCG 是一种常见的伪随机数生成算法。你不能使用 m=6 否则你的 LCG 周期会很低。您需要使用精心选择的 a、b 和 m 值来确保 LCG 没有小的周期性。

你可以使用 a=1664525, b=1013904223, m=2**32

这将产生伪随机整数,你可以得到一个骰子:

骰子 = 1 + lcg(a,b,m) % 6

于 2019-03-03T04:00:22.610 回答