作者DarkKiller (System hacked)
看板C_and_CPP
标题Re: [问题] 有关於乱数产生不重覆的问题
时间Mon Oct 3 11:36:43 2005
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)