我需要在组中生成随机数:100、500、1000和10000个数字制服和高斯人这对于创建一些直方图和其他统计数据是必要的。
条件不是使用python的本机随机函数,所以我想使用这个方法(线性同余生成器):Xn+1 ≡ (aXn + c) mod m
。这里我需要4个变量。
有人能告诉我如何实现这个算法吗?我假设m变量第一次是100
最佳答案
你已经知道这是Linear congruential generator,那么什么东西这么难读呢?
它告诉您已经知道的公式以及如何选择它们的说明:
一般lcg的周期最多为m,对于某些选择
因素a远小于此如果偏移量c不为零,
只有在以下情况下,LCG才会对所有种子值有一个完整的周期:
1)c和m是相对质数
2)a-1可被m的所有素因子整除
3)如果m是4的倍数,则a-1是4的倍数。
它们甚至在下表中给出了这些值的一些示例。这足以实现一个简单的函数:
def LCG(seed, n, a=1664525, c=1013904223, m=2**32):
numbers = []
for i in xrange(n):
seed = (a * seed + c) % m
numbers.append(seed)
return numbers
print LCG(3, 5)