我有一个简单的问题,我对随机数生成有点生疏.我想生成大的奇数整数(我使用双精度,因为我的数字可能在int范围之外)而且我无法弄清楚如何摆脱随机数生成中的小数并且数字是奇数.
现在我只有:
N = nMin + (nMax - nMin) * rand.nextDouble();
Run Code Online (Sandbox Code Playgroud)
正如我所说,nMin和nMax之间的任意随机数(带小数).任何帮助将非常感激!
如果你的数字可能超出了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位,可能是素数
如果它可能是素数,它也可能是奇数.
| 归档时间: |
|
| 查看次数: |
147 次 |
| 最近记录: |