我试图比较一个BigInteger(base)的值是否为>另一个BigInteger(素数)的值,如果'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;
}
}
答案 0 :(得分:30)
您可以使用BigInteger.compareTo(BigInteger)
比较它们。
在您的情况下,这将是while (base.compareTo(prime) > 0) {...}
。
此外,您的终止条件应该从if (a != one)
更改为if (!a.equals(one))
,因为具有相同整数值的两个BigInteger
变量不一定引用同一个对象(这就是==
1}}和!=
测试)。
答案 1 :(得分:7)
由于BigInteger
是对象,因此在使用相等运算符时应谨慎使用。现在,您正在执行参考比较(在这种情况下,很可能会失败)。您需要使用equals()
或compareTo()
方法。
BigInteger有一个内置的静态变量代表一个。使用equals()
方法或compareTo()
方法比较值:
if (!a.equals(BigInteger.ONE)) {
...
}
-OR -
if (a.compareTo(BigInteger.ONE) != 0) {
...
}
希望有所帮助!有关详细信息,请参阅此处:http://download.oracle.com/javase/6/docs/api/java/math/BigInteger.html
答案 2 :(得分:0)
也许
while (base.compareTo(prime)>0){
//rest of your loop
}