参考:YWY
从x到<x
考虑已知等概率
R
a
n
d
(
x
)
Rand(x)
Rand(x),我们可以通过任意操作得到:
R
a
n
d
(
y
)
[
0
≤
y
<
x
]
Rand(y)[0\leq y <x ]
Rand(y)[0≤y<x]
只需要每次随机的时候,判断得到的值是否满足
≤
y
\leq y
≤y即可
int a=randx();
while(a>=y)a=randx();
因为等概率能得到 0 → x − 1 0\to x-1 0→x−1,首先每一个都是等概率的,特意去掉某些数字剩下的仍然是等概率的。
从x到xx
即利用
R
a
n
d
(
x
)
Rand(x)
Rand(x)生成一个
x
x
x进制数。
每一位都是
R
a
n
d
(
x
)
Rand(x)
Rand(x),这样能保证这个数一定是等概率的。
两位:
int a=randx()*x+randx();
已知上述两个,我就可以先通过后者扩大随机范围,再通过前者得到自己想要的结果。