Random 在一定范围内生成随机数

Random 在一定范围内生成随机数,random,Random,假设我只有一个例程,它以相等的概率随机生成0和1,我如何使用它来找到1和n之间的随机数。我不能使用任何其他随机函数。我需要用我的常规来实现目标。请给我一些有用的建议 简单地使用公式 兰德()*(n-1)+1 设m=ceil(log2(n));也就是说,m是表示n所需的位数 生成长度为m的随机位字符串,并将其解释为非负整数k 如果k>=n,则返回步骤2。否则你的随机数是k+1 这是一种拒绝采样的形式,它将使您在[1,n]范围内的随机整数k+1上获得均匀分布。调用函数n次,只需sum@Mujahid

假设我只有一个例程,它以相等的概率随机生成0和1,我如何使用它来找到1和n之间的随机数。我不能使用任何其他随机函数。我需要用我的常规来实现目标。请给我一些有用的建议

简单地使用公式 兰德()*(n-1)+1

  • 设m=ceil(log2(n));也就是说,m是表示n所需的位数
  • 生成长度为m的随机位字符串,并将其解释为非负整数k
  • 如果k>=n,则返回步骤2。否则你的随机数是k+1

  • 这是一种拒绝采样的形式,它将使您在[1,n]范围内的随机整数k+1上获得均匀分布。

    调用函数n次,只需sum@MujahidDaudKhan但这不会给出一个统一的分布,我希望提问者想要。我们在这里谈论的是什么语言?@TimothyShields是的,你是right@MujahidDaud Khan:您的算法的结果是二项式分布,不是均匀分布对不起,但是由于random()是0或1,结果将是1或n,没有任何中间值