code: public static BigInteger nextBigInteger(
  		final BigInteger min,
  		final BigInteger max,
  		final Random random
  	) {
  		if (min.compareTo(max) >= 0) {
  			throw new IllegalArgumentException(format(
  				"min >= max: %d >= %d.", min, max
  			));
  		}
  
  		final BigInteger n = max.subtract(min).add(BigInteger.ONE);
  		return nextBigInteger(n, random).add(min);
  	}
docs: Returns a pseudo-random, uniformly distributed int value between min
  and max (min and max included).
  
  @param min lower bound for generated long integer (inclusively)
  @param max upper bound for generated long integer (inclusively)
  @param random the random engine to use for calculating the random
  long value
  @return a random long integer greater than or equal to {@code min}
  and less than or equal to {@code max}
  @throws IllegalArgumentException if {@code min >= max}
  @throws NullPointerException if one of the given parameters
  are {@code null}.