How do i compare values of BigInteger to be used as a condition in a loop?

58,977

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 BigIntegers 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

Share:
58,977
Scar
Author by

Scar

Noob

Updated on July 26, 2020

Comments

  • Scar
    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
    pseudoramble about 13 years
    It 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
    Matt Ball about 13 years
    Fair enough, I missed the if (a != one) bit.