Re: [問題] 有關於亂數產生不重覆的問題

看板C_and_CPP (C/C++)作者 (System hacked)時間19年前 (2005/10/03 11:14), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
Sir, 如果你只知道 Linear Congruential Method 的話,那也沒關係,但 LCM 不是 被用得最廣的,用的最廣的是用在目前的 SSL,在大多數的 SSL Library 裡都 不是用 LCM 當 PRNG。 另外上次樂透的問題那是他們自己耍白癡,把「彩券號碼」與「是否中獎」用 一個公式綁起來,結果被別人找到近似公式。 正確的作法是讓這兩個東西不相關,跟 PRNG 無關。 另外你說的東西根本跟 IBM 無關,這是很有名的一篇論文: Random number generators: good ones are hard to find Park and Miller, Communications of the ACM, vol. 31, no. 10, October 1988, p. 1195. ※ 引述《sjgau (sjgau)》之銘言: : 談 樂透程式的亂數產生器 : 產生亂數的副程式是 樂透程式的關鍵, : 可是,連XX銀行,每個月的營業規模達 : 數十億台幣的樂透程式,他們的亂數也是 : 寫得很爛。 : 不相信的話,請你花 一百元買兩組電腦選號 : 的樂透,然後看看你拿到的號碼,是否滿意? : 問題是出在,他們對於產生亂數的副程式 : 了解不夠,寫的不夠好。 : 目前,全世界最經常被使用的產生亂數的副程式, : 其數學公式如下 : r(n)= (r(n-1)*a + b) mod c : 第 n 個亂數,等於 前一個亂數, : 乘以 a, 加上 b : 把得到的結果,對 c 取餘數 : (a, b, c) 的選擇,非常重要 : IBM 建議使用 : a= 16807, b= 0, c= 2147483647 : 另外一組被推薦的是 : a= 48271, b= 0, c= 2147483647 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.54.119 ※ 編輯: DarkKiller 來自: 140.113.54.119 (10/03 11:38)
文章代碼(AID): #13GA8UGe (C_and_CPP)
文章代碼(AID): #13GA8UGe (C_and_CPP)