3

LargeInteger機能がないようです。または、機能がある場合でも処理できpowませpow(0)ん。BigInteger

私は自分自身を構築しようとしましたが、メモリがひどく急増しているようで、無限に実行されるため、無限ループが発生する可能性があります:

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ますか?

4

2 に答える 2

4

ループを通過するたびforに、次の行で結果を効果的に二乗しています。

base = base.times(base);

baseの累乗ではなく、(2 のexponent累乗)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を使用するようにアルゴリズムを変更してみてください。

于 2014-01-22T19:23:45.180 に答える
2

Numberの子孫である LargeInteger には、実際には pow 関数があります。

于 2014-01-22T19:25:48.787 に答える