简体   繁体   中英

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

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;          
        }   
    }

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

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

Maybe

while (base.compareTo(prime)>0){
//rest of your loop
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM