均匀生成随机数
在产生随机数的基础上进行整数平移,各个数的产生概率不变。但倘若将产生随机数的rand_N两两相加借此来获得更大范围的随机数,那么不同数字产生的概率不同。
已知 rand_N() 可以等概率的生成[1, N]范围的随机数
那么:
(rand_X() - 1) × Y + rand_Y() ==> 可以等概率的生成[1, X * Y]范围的随机数
即实现了 rand_XY()
拒绝取样
拒绝取样是在等概率产生随机数的基础上进行的。对于满足条件的数字取用,反之则舍弃。最后用数字相除所得到的余数+1.返回正确值。