java 如何比较BigInteger的值以用作循环中的条件?

1u4esq0p  于 2023-04-28  发布在  Java
关注(0)|答案(3)|浏览(131)

我试图比较一个BigInteger(base)的值是否是>(大于)另一个BigInteger(prime)的值,以及'a'的值是否不等于1。如果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;          
    }   
}
p1tboqfb

p1tboqfb1#

您可以使用BigInteger.compareTo(BigInteger)进行比较。
在您的情况下,这将是while (base.compareTo(prime) > 0) {...}
此外,终止条件应该从if (a != one)更改为if (!a.equals(one)),因为具有相同整数值的两个BigInteger变量不一定引用相同的对象(这是==!=测试的全部内容)。

dtcbnfnu

dtcbnfnu2#

由于BigInteger s是对象,所以在使用相等运算符时应谨慎。现在,您正在执行引用比较(在本例中,很可能会失败)。您需要使用equals()compareTo()方法。
BigInteger有一个内置的静态变量表示一个。使用equals()方法或compareTo()方法比较值:

if (!a.equals(BigInteger.ONE)) {
    ...
}

─或─

if (a.compareTo(BigInteger.ONE) != 0) {
    ...
}

希望有帮助!更多信息请参见此处:http://download.oracle.com/javase/6/docs/api/java/math/BigInteger.html

vddsk6oq

vddsk6oq3#

也许吧

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

相关问题