如何使用rand5()生成rand7()?

1,128 阅读1分钟
  • 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是根据25/7725/7*7计算得到,再用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)