用rand5()生成rand(n)

问题:有函数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;
            }
        }
    }

 

posted @ 2013-09-21 16:53  orchid  阅读(687)  评论(0编辑  收藏  举报