2の累乗をコーディングする最も効率的な方法は、整数のビットシフトを使用することです。
1 << n
私にくれます2^n
int
ただし、またはで許可されている最大値よりも大きい数がある場合long
、2の累乗を効率的に操作するために何を使用できますか?
(数値に対して加算、乗算、除算、モジュラス演算を実行できる必要があります)
2の累乗をコーディングする最も効率的な方法は、整数のビットシフトを使用することです。
1 << n
私にくれます2^n
int
ただし、またはで許可されている最大値よりも大きい数がある場合long
、2の累乗を効率的に操作するために何を使用できますか?
(数値に対して加算、乗算、除算、モジュラス演算を実行できる必要があります)
これはあなたが必要なものですか?
BigInteger hugeNumber = BigInteger.ONE.shiftLeft(n);
これは、n=1000の場合の結果です。
10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376
「2の累乗」でどのような操作を実行する必要がありますか?たとえば、除算と乗算だけの場合はlog2
、問題の2の累乗を保持し、代わりに減算と加算を使用できます。どんな種類の「操作」が必要かを知らなければ、効率的に「操作」する方法について良い提案をすることは不可能です;-)。
簡単: long
:-)
浮動小数点を気にしない場合はdouble
、2から2^1023までのすべての累乗を正確に表すことができます。
それ以外の場合は、実行している「操作」の種類によって異なります。
必要なもののように見えjava.math.BigInteger
ます。
、、、、そしてもちろんmod
、、、shiftLeft
があります。これは不変タイプ(ala )であるため、最終的に最も効率的な方法ではないかもしれませんが、パフォーマンスの問題として確実に特定されない限り、心配する必要はありません。shiftRight
add
multiply
subtract
divide
String
正確である必要がありますか?
それ以外の場合は、longにintの2を掛けたものとして表すことができます。
例:
x = 15 * 2 ^ 123