当前位置: 首页 > article >正文

rand5生成rand7

rand5 通常指的是一个能够生成 1 到 5 之间随机整数的函数,而 rand7 指的是一个能够生成 1 到 7 之间随机整数的函数。

方法:拒绝采样

核心思想:生成一个范围更大的随机数,然后通过取余数的方式将其缩减到 1 到 7 的范围内。由于 rand5 生成的是 1 到 5 的随机数,因此我们可以利用这个特性来生成一个 1 到 25 的随机数(因为 5*5=25),然后对 7 取余数,最后加 1 来调整范围。

具体的步骤:

1、生成更大的随机数:
首先生成两个 rand5 的结果,分别记为 a 和 b。这样,a 和 b 都是 1 到 5 之间的整数。将 a 和 b 相乘,得到一个 1 到 25 之间的数(因为 5*5=25)。然后,将这个乘积对 7 取余数,得到一个 0 到 6 之间的数。

2、调整范围:
由于需要的是 1 到 7 之间的数,所以我们将上一步得到的余数加 1,这样就能确保结果是 1 到 7 之间的数。

3、拒绝采样:
在这个过程中,我们可能会得到 0,但 0 不在我们想要的范围内(1 到 7)。因此,如果结果是 0,就重新执行上述过程,直到得到一个非零的结果。

public int rand7() {
    int num;
    do {
        // 生成 1 到 25 之间的随机数,然后对 7 取余数
        num = (rand5() + (rand5() - 1) * 5) % 7 + 1;
    } while (num > 7); // 由于我们的计算结果范围是 1 到 7,所以不需要这个检查
    return num;
}

http://www.kler.cn/a/369918.html

相关文章:

  • 【React】 react路由
  • kettle与Springboot的集成方法,完整支持大数据组件
  • Linux探秘坊-------5.git
  • 煤矿场景下拖链检测数据集VOC+YOLO格式21407张1类别
  • Spring Security(maven项目) 3.0.2.6版本—总
  • SpringBoot集成Flink-CDC,实现对数据库数据的监听
  • leetcode hot100【LeetCode 394.字符串解码】java实现
  • Shein注册不了的常见原因及解决方法
  • Java知识巩固(十二)
  • 蚁群算法(Ant Colony Optimization)详细解读
  • Flink系列之:学习理解通过状态快照实现容错
  • matlab 绘图操作
  • Rust教程
  • 初探Servlet
  • picomax的rkipc开启rtmp功能
  • Python 基础语法 - 变量
  • 快速学会C 语言基本概念和语法结构
  • 电脑技巧:如何进行磁盘测速?
  • 模型 五遍沟通法(企业管理)
  • 【Gaussian Grouping: Segment and Edit Anything in 3D Scenes】阅读笔记
  • Java最全面试题->数据库/中间件->KafKa面试题
  • matlab实现了基于移动可变形组件(Moving Morphable Components,MMC)的拓扑优化算法
  • svg 初识+了解 + 应用 + 动画
  • Java识别图片或扫描PDF中的文字
  • [NewStar 2024] week4
  • 微机原理与接口技术—— 总线形成(2)