我需要随机大整数来检查数字是否为质数(有一个方法可以做到这一点),但该数字必须从 264 开始。堆栈溢出中有一个答案如何将 BigIntegers 从 x 随机到 y,但我不知道如何在此方法中放入 264 。有什么办法吗?
BigInteger randomNumber;
do {
randomNumber = new BigInteger(upperLimit.bitLength(), randomSource);
} while (randomNumber.compareTo(upperLimit) >= 0);
我预计输出范围为 18 446 744 073 709 551 616 到任何更大的可用值。
最佳答案
首先,使用长度为 9 的字节数组创建数字 2^64:
byte[] bytes = new byte[8+1];
bytes[0] = 1; // 0x01 0x00 0x00 0x00 .... 0x00
BigInteger base = new BigInteger(bytes);
然后您可以使用 BigInteger(int, Random);
构造函数添加您喜欢的任何随机 BigInteger。
BigInteger r = new BigInteger(32, new Random());
System.out.println(base);
System.out.println(r);
System.out.println(base.add(r));
这将生成如下所示的结果:
18446744073709551616
1629299848
18446744075338851464
关于java - 如何生成大于 2**64 的随机 BigIntegers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58548480/