python實現乙個偽隨機數生成器

2021-10-08 15:57:12 字數 669 閱讀 9157

偽隨機數生成的方法有很多  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=',')

乙個偽隨機數生成演算法

乙個偽隨機數生成演算法 這幾天逛程式設計師論壇,發現了不少好帖子,增長了不少知識,現拿其中一則為例說明。某人提出乙個問題,說怎麼樣能生成一億個不重複的隨機數呢?問題表述起來很簡單,似乎只要弄明白什麼叫隨機數以及怎樣用電腦生成隨機數,就能解決問題了。這倆問題大多數程式設計師都會,我在這裡再表述一番。隨...

乙個偽隨機數生成演算法

這幾天逛程式設計師論壇,發現了不少好帖子,增長了不少知識,現拿其中一則為例說明。某人提出乙個問題,說怎麼樣能生成一億個不重複的隨機數呢?問題表述起來很簡單,似乎只要弄明白什麼叫隨機數以及怎樣用電腦生成隨機數,就能解決問題了。這倆問題大多數程式設計師都會,我在這裡再表述一番。隨機數,個人理解為一定範圍...

乙個隨機數生成函式

include include include 乙個隨機數生成函式 此函式不是基於用線性同餘法 標準庫中的rand 基於此方法 而是以乙個knuth提出的相減方法為基礎,速度比標準庫中的rand 要快,但不標準。staticlongg next 1 設定seed為任意負數值作為種子。voidrand...