Java限制随机加倍

Rya*_*les 0 java

我有一个简单的问题,我对随机数生成有点生疏.我想生成大的奇数整数(我使用双精度,因为我的数字可能在int范围之外)而且我无法弄清楚如何摆脱随机数生成中的小数并且数字是奇数.

现在我只有:

N = nMin + (nMax - nMin) * rand.nextDouble();
Run Code Online (Sandbox Code Playgroud)

正如我所说,nMin和nMax之间的任意随机数(带小数).任何帮助将非常感激!

cor*_*iKa 6

如果你的数字可能超出了int范围,那么你应该使用long或失败BigInteger.

使用此问题中的信息创建一个随机的BigInteger,如果它甚至只是添加1.

BigInteger randomOdd(BigInteger min, BigInteger max) {
    BigInteger range = max.subtract(min);

    // expected iterations: 2 - max iterations: infinite
    BigInteger tmp;
    do {
        tmp = new BigInteger(n.bitLength(), rng); // rng is your Random Number Generator
    } while (tmp.compareTo(range) >= 0);

    BigInteger result = min.add(tmp);

    // force the result to be odd
    // TODO: will this push it over max?
    result = result.or(BigInteger.ONE); 

    return result;
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以在BigInteger类上使用方法BigInteger.probablePrime():

public static BigInteger probablePrime(int bitLength, Random rnd)

BigInteger使用指定的值返回可能为素数的正数bitLength.此方法返回的BigInteger是复合的概率不超过2^100.

参数:

  • bitLength - 返回的bitLength BigInteger.
  • rnd - 用于选择要测试素数的候选者的随机比特源.

返回:

  • 一个BigIntegerbitLength位,可能是素数

如果它可能是素数,它也可能是奇数.