pow为LargeInteger

时间:2014-01-22 19:20:49

标签: java pow largenumber jscience

LargeInteger似乎没有pow功能,如果有,则无法处理pow(0) BigInteger can

我试图构建自己的内存,但内存似乎很糟糕,并且可能存在无限循环,因为它无休止地运行:

public static LargeInteger liPow(LargeInteger base, int exponent){
    if(exponent == 0){
        return LargeInteger.valueOf(1);
    }
    else if(exponent == 1){
        return base;
    }
    else{
        for(int i=1; i<exponent; i++){
            base = base.times(base);
        }
        return base;
    }
}

如何为pow开发LargeInteger方法?

2 个答案:

答案 0 :(得分:4)

每次通过for循环,您都可以使用此行有效地对结果进行平方:

base = base.times(base);

你最终会使用base获得(exponent幂的2倍),而不是base exponent的力量。

1开始,并在base每个循环中相乘。

LargeInteger result = LargeInteger.valueOf(1);
for(int i = 0; i < exponent; i++){
    result = result.times(base);
}
return result;

为了优化,您可以尝试修改算法以使用exponentiation-by-squaring

答案 1 :(得分:2)

LargeInteger,来自Number,实际上有一个战俘功能。