23

I am trying to compare if the value of one BigInteger(base) is > (greater than) 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;          
    }   
}
Mark Rotteveel
  • 100,966
  • 191
  • 140
  • 197
Scar
  • 725
  • 2
  • 7
  • 28

3 Answers3

36

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).

Ted Hopp
  • 232,168
  • 48
  • 399
  • 521
8

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

pseudoramble
  • 2,541
  • 22
  • 28
  • 2
    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. – pseudoramble Jun 01 '11 at 22:21
  • Fair enough, I missed the `if (a != one)` bit. – Matt Ball Jun 01 '11 at 22:26
0

Maybe

while (base.compareTo(prime)>0){
//rest of your loop
}
james_bond
  • 6,778
  • 3
  • 28
  • 34