How do i compare values of BigInteger to be used as a condition in a loop?
Solution 1
You can compare them using BigInteger.compareTo(BigInteger)
.
In your case, this would be while (base.compareTo(prime) > 0) {...}
.
Also, your termination condition should be changed from if (a != one)
to if (!a.equals(one))
since two BigInteger
variables with the same integer value are not necessarily referencing the same object (which is all that ==
and !=
test).
Solution 2
Since BigInteger
s are objects, you should use caution when using the equality operators. Right now, you're performing a reference comparison (which in this case, will more than likely fail). You'll need to use the equals()
or compareTo()
methods.
BigInteger has a built-in static variable representing one. Use the equals()
method or the compareTo()
method to compare values:
if (!a.equals(BigInteger.ONE)) {
...
}
-or-
if (a.compareTo(BigInteger.ONE) != 0) {
...
}
Hope that helps! See here for more information: http://download.oracle.com/javase/6/docs/api/java/math/BigInteger.html
Comments
-
Scar almost 4 years
I am trying to compare if the value of one BigInteger(base) is > the value of another BigInteger(prime) and if the value of 'a' is not equal to one. If value of a is not 1, it should break out of the loop. How should i compare them?
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; } }
-
pseudoramble about 13 yearsIt looks like he needs both compareTo and equals. See here: "...and if the value of 'a' is not equal to one. If value of a is not 1, it should break out of the loop." In addition, his code shows a check for equality between the new BigInteger he made called "one" and the other calculated value "a". Sorry for the outdated link.
-
Matt Ball about 13 yearsFair enough, I missed the
if (a != one)
bit.