伪随机数生成的方法有很多 1.平方取中法 2.线性同余法
这里介绍线性同余法: 公式 rNew=(a*rOld+b)%(end-start)
1. a称为乘数,b称为增量,(end-start)称为模数,它们均为常数
2.然后设置rOld=rNew ,一般要求用户指定种子数rOld(也叫seed),当然也可以自由选择a和b
但是这两个数如果选择不好,可能会影响数字的随机性 a=4p+1 b=2q+1 最好
def myrandint(start,end,seed=9999999):
a=32310901
b=1729
rOld=seed
m=end-start
while True:
rNew=(a*rOld+b)%m
yield rNew #每调用一次这个函数,才生成一次随机数,所以要惰性求值
rOld=rNew
#模拟20个不同的种子生成随机数
for i in range(20):
r=myrandint(1,10000,i)
print('种子:',i,'生成的随机数')
for j in range(10):
print(next(r),end=',')