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

2022-09-02 09:06:31

我试图比较一个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;          
        }   
    }

答案 1

您可以使用BigInteger.compareTo(BigInteger)来比较它们。

在您的情况下,这将是 .while (base.compareTo(prime) > 0) {...}

此外,您的终止条件应从 更改为,因为具有相同整数值的两个变量不一定引用同一对象(仅此而已和测试)。if (a != one)if (!a.equals(one))BigInteger==!=


答案 2

由于 s 是对象,因此在使用相等运算符时应格外小心。现在,您正在执行参考比较(在本例中,这很可能会失败)。您需要使用 or 方法。BigIntegerequals()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


推荐