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