Как использовать линейный конгруэнтный генератор
Я должен разработать линейный конгруэнтный генератор с этой формулой Xn+1 = (aXn + b) mod m
в Python. Я думаю, что понимаю, как генерировать последовательность чисел, но я не знаю, как ее использовать, например, для симуляции игры в кости (мне нужно число от 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()
1 ответ
Решение
LCG - это общий алгоритм генерации псевдослучайных чисел. Вы не можете использовать m=6, иначе периодичность LCG будет низкой. Вам нужно использовать правильно выбранные значения a, b и m, чтобы гарантировать, что LCG не имеет небольшой периодичности.
Вы можете использовать а =1664525, б =1013904223, м =2**32
Это даст псевдослучайные целые числа, вы можете получить кости с:
кости = 1 + lcg(a,b,m) % 6