#java #biginteger
#java #biginteger
Вопрос:
Я пытаюсь сравнить, является ли значение одного BigInteger (base) > значением другого BigInteger (prime) и не равно ли значение ‘a’ единице. Если значение a не равно 1, оно должно выйти из цикла. Как я должен их сравнивать?
Random ran = new Random();
BigInteger prime = new BigInteger(16,ran);
BigInteger base,a,one;
one = new BigInteger("1");
for (int i = 0; i < 65535; i ){
while (base>prime){
base = new BigInteger(16,ran);
}
a = base.modPow(prime.subtract(one),prime);
System.out.println("a: " a);
if (a != one){
break;
}
}
Ответ №1:
Вы можете сравнить их с помощью BigInteger.compareTo(BigInteger)
.
В вашем случае это было бы while (base.compareTo(prime) > 0) {...}
.
Кроме того, ваше условие завершения должно быть изменено с if (a != one)
на if (!a.equals(one))
, поскольку две BigInteger
переменные с одинаковым целочисленным значением не обязательно ссылаются на один и тот же объект (что является всем этим ==
и !=
тестом).
Ответ №2:
Поскольку BigInteger
s являются объектами, вам следует соблюдать осторожность при использовании операторов равенства. Прямо сейчас вы выполняете сравнение ссылок (которое в этом случае, скорее всего, завершится неудачей). Вам нужно будет использовать методы equals()
или compareTo()
.
BigInteger имеет встроенную статическую переменную, представляющую единицу. Используйте equals()
метод или compareTo()
method для сравнения значений:
if (!a.equals(BigInteger.ONE)) {
...
}
-или-
if (a.compareTo(BigInteger.ONE) != 0) {
...
}
Надеюсь, это поможет! Смотрите здесь для получения дополнительной информации: http://download.oracle.com/javase/6/docs/api/java/math/BigInteger.html
Комментарии:
1. Похоже, ему нужны как compareTo, так и equals. Смотрите здесь: «…и если значение ‘a’ не равно единице. Если значение a не равно 1, оно должно выйти из цикла.» Кроме того, его код показывает проверку на равенство между созданным им новым BigInteger с именем «one» и другим вычисленным значением «a». Извините за устаревшую ссылку.
2. Справедливо, я пропустил
if (a != one)
бит.
Ответ №3:
Возможно
while (base.compareTo(prime)>0){
//rest of your loop
}