Нужна помощь в преобразовании целочисленного метода, чтобы вместо него использовать BigInteger - PullRequest
0 голосов
/ 25 сентября 2019

Я хочу заменить все целые числа в следующем блоке кода на BigIntegers (проверяет, является ли число простым и возвращает true / false):

    static boolean primeCheck(long n) {
        if (n <= 1) {
            return false;
        }
        for (long i = 2; i < n; i++) {
            if (n % i == 0) {
                return false;
            }
        }

        return true;
    }

Это, очевидно, прекрасно работает с целыми числами, но с BigIntegersЭто то, как далеко я продвинулся, пока не сдался:

    static boolean check(BigInteger n) {
        BigInteger lessThanOne;
        lessThanOne = n.compareTo(BigInteger.ONE);
        if (lessThanOne.compareTo(BigInteger.ONE) <= 0) {
            return false;
        } for (BigInteger i = BigInteger.valueOf(2);
                i.compareTo(n) < 0;
                i = i.add(BigInteger.ONE)) {
            BigInteger result = n.mod(i);
            if (result.compareTo(BigInteger.ZERO) == 0) {
                return false;
            }
        }
        return true;
    }

Могу помочь с этим.

1 Ответ

0 голосов
/ 25 сентября 2019

lessThanOne здесь ошибка.Просто судите n.compareTo (1) в порядке.

static boolean check(BigInteger n) {
    //BigInteger lessThanOne = BigInteger.ONE;
    //lessThanOne = n.compareTo(BigInteger.ONE);
    if (n.compareTo(BigInteger.ONE) <= 0) {
        return false;
    }
    for (BigInteger i = BigInteger.valueOf(2); i.compareTo(n) < 0; i = i.add(BigInteger.ONE)) {
        BigInteger result = n.mod(i);
        if (result.compareTo(BigInteger.ZERO) == 0) {
            return false;
        }
    }
    return true;
}
...