问题:有函数rand5(),它能够等概率生成[0,5)之间的整数。由rand5()构造rand(n)使其能够等概率生成[0,n)之间的整数。

思路1:有rand5()先生成等概率生成0和1的rand01(),有了rand01就可以像上一篇文章一样生成rand(n)。

思路2:rand5和rand01有何区别?一个是生成01,一个是生成01234,(一个以2为基,一个以5为基),既然rand01能用来构造rand(n),那么rand5也可以通过同样的原理得到rand(n).

Java代码:

//用rand5生成rand(n)
    public int rand2(int n){
        while(true){
            int v=0;
            int base=1;
            int bits=(int)Math.ceil((Math.log(n)/Math.log(5)));
            for(int i=0;i<bits;i++){
                v+=rand5()*base;
                base*=5;
            }
            if(v<n){
                return v;
            }
        }
    }

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-07-20
  • 2021-11-18
  • 2021-12-09
  • 2021-11-28
  • 2021-12-19
  • 2021-10-01
猜你喜欢
  • 2022-03-09
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-24
  • 2021-06-01
  • 2022-12-23
相关资源
相似解决方案