为Java中的BigIntegers生成从1到n-1的随机数

时间:2012-12-22 19:01:57

标签: java biginteger

  

可能重复:
  How to generate a random BigInteger value in Java?

我在JAVA中使用BigInteger类,我想从1 to x-1生成随机数。我不知道该怎么做?

我无法使用nextInt(),因为它只接受int而不是BigIntegers,我将生成32位及以上的数字,因此即使nextInt()也无效。< / p>

我知道如果我搜索我可能会找到一些有用的解决方案,但我的时间太短了。 (截止日期前2小时)

先谢谢。

2 个答案:

答案 0 :(得分:1)

愿这项工作

    public static void main(String[] args) {
        BigInteger bigInteger = new BigInteger("9349988899999");
        BigInteger bigInteger1 = bigInteger.subtract(new BigInteger("1"));
        System.out.println(randomBigInteger(bigInteger1));
    }

    public static BigInteger randomBigInteger(BigInteger n) {
        Random rnd = new Random();
        int maxNumBitLength = n.bitLength();
        BigInteger aRandomBigInt;
        do {
            aRandomBigInt = new BigInteger(maxNumBitLength, rnd);
            // compare random number lessthan ginven number
        } while (aRandomBigInt.compareTo(n) > 0); 
        return aRandomBigInt;
    }

答案 1 :(得分:0)

只需使用获得Random

constructor即可
Random rnd = new Random();
BigInteger i = new BigInteger(maxNumOfBits, rnd);

如果你想要介于0和某个数字之间,你可以生成与该数字相同的位数并生成随机数,直到你得到一个更小的数字。

(未经过测试的代码)

public static BigInteger randomBigInteger(BigInteger maxNum) {
    Random rnd = new Random();
    int maxNumBitLength = maxNum.bitLength();
    BigInteger rndNum;
    do {
        rndNum = new BigInteger(maxNumBitLength, nd);
    } while(result.compareTo(upperLimit) >= 0);
    return result;
}