1
BigInteger bigInteger = new BigInteger("534534");

The range between 2 and bigInteger-2;

  • Well, you could use something like `new BigInteger(bigInteger.subtract(BigInteger.valueOf(4)).bitCount(), new Random()).add(BigInteger.valueOf(2))` - just have a look at the JavaDoc. – Thomas Apr 23 '21 at 06:00
  • 1
    Does this answer your question? [How to generate a random BigInteger value in Java?](https://stackoverflow.com/questions/2290057/how-to-generate-a-random-biginteger-value-in-java) – Yoshikage Kira Apr 23 '21 at 06:00

1 Answers1

1

You can generate a random double in the closed range [x1,x2] like this [1]:

double f = Math.random()/Math.nextDown(1.0);
double x = x1*(1.0 - f) + x2*f;

Using BigDecimals with the range between 2 and bigInteger-2;:

double f = Math.random()/Math.nextDown(1.0);
BigDecimal.valueOf(2).multiply(BigDecimal.valueOf(1.0 - f)).add(new BigDecimal(bigInteger.subtract(BigInteger.valueOf(2))).multiply(BigDecimal.valueOf(f))).toBigInteger()
Edgar Domingues
  • 930
  • 1
  • 8
  • 17