JAVA BigInteger class error: BigInteger: modulus not positive

JAVA BigInteger class error: BigInteger: modulus not positive

我编写了用于获取两个数字之间的 GCD(最大公除法)的代码。 这是因为我应该在第 19 位输入数字,我想我需要使用 BigInteger Math class。但是,在我编译代码后出现此错误。

Exception in thread "main" java.lang.ArithmeticException: BigInteger: modulus not positive at java.math.BigInteger.mod(BigInteger.java:2415) at test.GCD(test.java:9) at test.GCD(test.java:9) at test.GCD(test.java:9) at test.GCD(test.java:9) at test.main(test.java:22)

这是我的代码。

import java.util.*;
import java.math.BigInteger;

public class test {
public static BigInteger GCD(BigInteger a, BigInteger b) {
    if (b.equals(0))
        return a;
    else
        return GCD(b, a.mod(b));
}

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    BigInteger p = BigInteger.valueOf(1);
    BigInteger q = BigInteger.valueOf(1);
    BigInteger i = BigInteger.ONE;
    BigInteger z = BigInteger.ONE;
    p = sc.nextBigInteger();
    q = sc.nextBigInteger();

    while (true) {
        if (GCD(p, q).compareTo(i) == -1) {
            System.out.print("1");
        }
        else if(GCD(p, q).compareTo(i) == 0) {
            System.out.print("1");
        }
        else if(GCD(p,q).compareTo(i) == 1) {
            break;
        }
        i.add(z);
    }
}
}

没有语法错误。

基本语句有问题

if (b.equals(0))

试图将 BigInteger b 与盒装整数 0 进行比较,后者显然不相等,导致 0 致命地作为模数传递。你可以使用

if (b.equals(BigInteger.ZERO)) {