在范围(x,y)中获取随机BigInteger

时间:2014-04-14 07:23:54

标签: java random range biginteger

我需要获得一个大于2 ^ 511且低于2 ^ 512的随机BigInteger。

4 个答案:

答案 0 :(得分:3)

byte[] bytes = new byte[64];    // 512 bits
new Random().nextBytes(bytes);
bytes[0] |= 0x80;               // set the most significant bit
return new BigInteger(1, bytes);

答案 1 :(得分:2)

此解决方案首先创建一个值为2 ^ 511的BigInteger,然后在0到2之间添加一个值^ 511 - 1:

StringBuilder builder = new StringBuilder("1");
for (int bit = 0; bit < 511; bit++) builder.append("0");
BigInteger value = new BigInteger(builder.toString(), 2).add(new BigInteger(511, new Random()));

答案 2 :(得分:1)

来自doc:

  

BigInteger(int numBits,Random rnd)

     

构造一个随机生成的BigInteger,均匀分布在0到(2numBits - 1)的范围内,包括在内。

所以这样的事情应该有效:

    BigInteger number = new BigInteger(512, new Random()); //Give you a number between 0 and 2^512 - 1
    number = number.setBit(0); //Set the first bit so number is between 2^511 and 2^512 - 1

答案 3 :(得分:0)

你可以试试

public static void main(String[] args) {
    int min = 511;
    double rand = Math.random(); //between 0 and 1
    double exp = min + rand; //between 511 et 512

    Double result = Math.pow(2, exp);

    System.out.println("result = ["+result+"]");

}

它可能没有优化,但它的工作原理。使用double结果,您可以获得整数。