Java ArithmeticException BigInteger 会溢出支持的范围

use*_*421 3 java overflow range biginteger arithmeticexception

我正在研究一种算法来检查数字是否为素数并且需要处理非常大的数字,因此我使用的是 BigInteger 类。问题是抛出这个异常ArithmeticException BigInteger 会溢出支持的范围

Exception in thread "main" java.lang.ArithmeticException: BigInteger would overflow supported range
    at java.math.BigInteger.reportOverflow(Unknown Source)
    at java.math.BigInteger.checkRange(Unknown Source)
    at java.math.BigInteger.<init>(Unknown Source)
    at java.math.BigInteger.shiftLeft(Unknown Source)
    at java.math.BigInteger.pow(Unknown Source)
    at Kitas.main(Kitas.java:118)
Run Code Online (Sandbox Code Playgroud)

以及抛出异常的行:

b = BigInteger.valueOf(2).pow((int) (35*(Math.pow(2, counter))));
Run Code Online (Sandbox Code Playgroud)

一旦计数器达到 26 的值,就会抛出异常。

Lou*_*man 5

(int) (35 * Math.pow(2, 26)) == (int) (2348810240d) = Integer.MAX_VALUE
Run Code Online (Sandbox Code Playgroud)

结果是您试图将 2 提高到 Integer.MAX_VALUE,因此结果将超过 Integer.MAX_VALUE 二进制数字。 BigInteger不够大,存储这么大的数字是不切实际的。

Java 中没有任何内置功能可以让您测试这么大的数字的素性。