将长方法转换为BigInteger方法

时间:2014-04-18 22:13:26

标签: java biginteger

我有两种使用long的方法,我想使用BigInteger:

public static long findfirstnocommon(long n) {
    long j;
    for(j = 2; j < n; j++)
        if(euclid(n,j) == 1) return j;
    return 0;
}

public static long euclid(long m, long n) { 
    while(m > 0) {
        long t = m;
        m = n % m;
        n = t;
    }
    return n;
}

这两种方法在我的程序中非常有效。但是,当我将它们翻译成BigIntegers时,我得到了这个:

  public static BigInteger findfirstnocommon(BigInteger n) {
    BigInteger j;
    for(j = BigInteger.valueOf(2); j.compareTo(n) == -1; j.add(BigInteger.valueOf(1))){
        if(euclid(n,j).compareTo(BigInteger.valueOf(1)) == 0){
            return j;
        }
    }
    return BigInteger.valueOf(0);
}

public static BigInteger euclid(BigInteger m, BigInteger n) { 
    BigInteger zero = BigInteger.valueOf(0);
    while(m.compareTo(zero) == 1) {
        BigInteger t = m;
        m = n.mod(m);
        n = t;
    }
    return n;
}

当我使用它们的方法并在我的程序中运行它时,它似乎卡住而不起作用。我一直在试图看出哪些是错的,无法弄明白。有什么建议?谢谢。

1 个答案:

答案 0 :(得分:1)

j.add(BigInteger.valueOf(1))不会更改j。它会返回 BigInteger,其价值超过j,但您要丢弃它。请尝试j = j.add(BigInteger.ONE) [此常量为您提供,因此您无需键入valueOf(1)]。

实际上,BigInteger(如String)是 immutable 类型,这意味着没有方法可以更改BigInteger对象的内容,只返回新BigInteger个对象的方法。