·约 1832 字·4 分钟
AI摘要: 本文介绍了如何使用数学原理和C++代码生成等概率的随机数。首先,通过数学公式$(randX() - 1) * Y + randY()$可以生成等概率的$[1, X * Y]$范围内的随机数。证明过程基于$randX()$和$randY()$分别生成$[1, X]$和$[1, Y]$之间的等概率随机数。联合概率表展示了如何从这些随机数中采样得到均匀分布的$[1, XY]$之间的随机数。接着,文章提供了使用C++编写的代码示例,演示了如何通过构造特定表达式来生成在指定范围内的均匀随机数。然而,这种方法效率较低,因为只有当采样到$[1, 10]$之间时才会停止,而$[11, 49]$之间的数会被丢弃。为了提高效率,文章提出了一种优化方法,通过模除操作将范围缩小到$[1, 10]$,并进一步优化为只采样$[41, 49]$之间的数,从而提高了效率。最后,文章还探讨了从进制的角度解决问题的方法,指出如果给定$rand1()$只能生成$[0, 1]$之间的均匀随机数,那么可以通过二进制编码的方式生成$[a, b]$之间的均匀随机数。...