Я новичок в Java и просто пишу программу с BigInteger.
public static void main(String[] args) {
BigInteger n = new BigInteger("5");
BigInteger i = new BigInteger("2");
while (lesserOrEqual(i,n) {
System.out.println("n.mod(i) = "+n.mod(i));
if (n.mod(i) == ZERO) {
n = n.divide(i);
}
else {
i.add(ONE);
}
System.out.println("n = "+n);
System.out.println("i = "+i);
}
public static boolean lesserOrEqual(BigInteger m, BigInteger n) `{
if (m.compareTo(n) == -1 || m.compareTo(n) == 0)
return true;
return false;
}
ZERO и ONE определены для типа BigInteger 0, 1 соответственно.
Я хочу, чтобы «i = 2» делило «n = 5», если «n mod i == 0», иначе «i ++», пока «n» не будет меньше или равно «i».
Я думаю, что вывод должен быть
n.mod(i) = 1
n = 5
i = 3
n.mod(i) = 2
n = 5
i = 4
n.mod(i) = 1
n = 5
i = 5
n.mod(i) = 0
n = 1
i = 5
и с эквивалентным кодом с примитивным типом int я получаю ожидаемый результат.
но это с BigInteger идет в бесконечный цикл
n.mod(i) = 1
n = 5
i = 2
...
Кто-нибудь знает, почему это так?