-
rand5()能够生成0-4的随机数
-
rand7()能够生成0-6的随机数
已知rand7()生成rand5()
简单,不断生成0-6的随机数,小于5则返回即可
int rand5()
{
int res = rand5();
while(res>4)
{
res = rand5();
}
return res;
}
已知rand5()生成rand7()
考虑如何使用rand5()生成大于4的随机数——均匀随机
使用rand5()+rand5()×5,rand5()是0,1,2,3,4的随机,rand5()×5是0,5,10,15,20的随机,因此对于0-24的所有数字的取样,都是等概率的。
对于任意randn(),都可以通过randn()×n+randn() 来扩展随机数范围
采用上述方法获取rand7()会消耗大量的时间,因此不能消极等待小于7的随机数的出现。
采用rand25()来生成rand21(),这个21是根据计算得到,再用rand21()对7取余来生成rand7():
int rand7()
{
int res = rand5()*5 + rand5();
while(res>20)
{
res = rand5()*5 + rand5();
}
return res%7;
}
用random实现任意范围的随机整数
import random
def rand_int(m, n):
r = n - m
return round(random.random() * r + m)