我试图比较一个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;
}
}
3条答案
按热度按时间p1tboqfb1#
您可以使用
BigInteger.compareTo(BigInteger)
进行比较。在您的情况下,这将是
while (base.compareTo(prime) > 0) {...}
。此外,终止条件应该从
if (a != one)
更改为if (!a.equals(one))
,因为具有相同整数值的两个BigInteger
变量不一定引用相同的对象(这是==
和!=
测试的全部内容)。dtcbnfnu2#
由于
BigInteger
s是对象,所以在使用相等运算符时应谨慎。现在,您正在执行引用比较(在本例中,很可能会失败)。您需要使用equals()
或compareTo()
方法。BigInteger有一个内置的静态变量表示一个。使用
equals()
方法或compareTo()
方法比较值:─或─
希望有帮助!更多信息请参见此处:http://download.oracle.com/javase/6/docs/api/java/math/BigInteger.html
vddsk6oq3#
也许吧