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

标签 java biginteger

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

最佳答案

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

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

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

关于java - 我如何比较 BigInteger 的值以用作循环中的条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6208348/

相关文章:

java - 在 Java 中序列化 BigInteger,用 Botan 反序列化?

C++ GMP 生成随机数

java - BigInteger.toString 方法正在删除前导 0

javascript - React Native 无法返回数组

java - tomcat请求servlet

java - Java中RandomAccessFile的并发

java - 从 BigDecimal 获取约简分数

java - 为什么 Apache Camel 邮件组件将正文作为附件发送?

java - 有没有办法将变量从不同的方法传递到单个方法中?

java - 从 String 创建一个 BigInteger 并向其填充 "0"