java - 如何生成大于 2**64 的随机 BigIntegers

标签 java biginteger

我需要随机大整数来检查数字是否为质数(有一个方法可以做到这一点),但该数字必须从 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/

相关文章:

c# - 在 C# 中计算乘法的高位

string - 如何保留Java中的100万个数字?

java - 为什么需要使用 "big = big.add(..)"来求和 BigIntegers?

java - 尝试将字符串写入 Android 应用程序上的文件,打开时崩溃

java - 将 5 种不同的产品保存到共享首选项

java - 使用 Linkify Android 打开 Activity

Java 抛出 NumberFormatException

javascript - JavaScript 范围内的随机大整数

java - 过度配置综合症

java - 乘以没有大整数的大整数