等概率的代码如下:
while(1){
int res = 0, bits = ceil(log(n)/log(2.0));
for(int i = 0; i < bits; i++){
if(rand01() == 1)
res |= (1 << i);
}
if(res < n)
return res;
}
不等概率(有一个随机数发生器,以概率P产生0,概率(1-P)产生1,请问能否利用这个随机数发生器,构造出新的发生器,以1/2的概率产生0和1):
int randequal(){
int a = randp();
int b = randp();
if(a == 0 && b == 1)
return 0;
if(a == 1 && b == 0)
return 1;
return randequal();
}