如何让您的自定义rand函数在python

问题描述:

我想打一个随机数发生器如何让您的自定义rand函数在python

所以我做了很多研究,做了一个小的代码下面

a=1 
b=2 
m=5000 
x=3 
lst=[] 
for i in range(10): 
    x=(a*x+b)%m 
    lst.append(x) 
print(lst) 
if len(lst) != len(set(lst)): 
    print("it has duplicates but possibly random numbers") 
else: 
    print("those were random numbers") 

的数学公式,我从拿到here它给了我一些随机数,但只有当数值很大时,如果我选择小数值(假设m = 5,保持其余值相同),我可以看到重复数字序列正在形成。

*问题*

我可以从here巨蟒看到OS得到它,它不会产生他们 因此,它是产生在python随机数的正确方法?

你的随机数是最正确的。问题在于你的距离发生器:

一般混合同余发生器的周期最多为m,对于因子a的某些选择远远小于此。

因此,如果您m=5 - 幅度不宜超过5

另外,还要注意,认为:

混合同余发生器将有一个完整周期的所有种子如果 值且仅当:

m和偏移c互质,
a-1是的m所有质因数整除,
a-1被4整除,如果m是整除4

来源:您

+0

如何范围有什么在这里做提供维基文章。就像获得10个随机数字一样。 – codaholic

+1

你不能得到比你的'm'值更多的唯一数字 –