java.lang.Object | ||
↳ | java.lang.Number | |
↳ | java.math.BigInteger |
This class represents immutable integer numbers of arbitrary length. Large numbers are typically used in security applications and therefore BigIntegers offer dedicated functionality like the generation of large prime numbers or the computation of modular inverse.
Since the class was modeled to offer all the functionality as the Integer class does, it provides even methods that operate bitwise on a two's complement representation of large integers. Note however that the implementations favors an internal representation where magnitude and sign are treated separately. Hence such operations are inefficient and should be discouraged. In simple words: Do NOT implement any bit fields based on BigInteger.
Implementation Note:
The native OpenSSL library with its BIGNUM operations covers all the
meaningful functionality (everything but bit level operations).
Constants | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
BigInteger | ONE | The BigInteger constant 1. |
|||||||||
BigInteger | TEN | The BigInteger constant 10. |
|||||||||
BigInteger | ZERO | The BigInteger constant 0. |
Public Constructors | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Constructs a random non-negative
BigInteger instance in the range
[0, 2^(numBits)-1]. | |||||||||||
Constructs a random
BigInteger instance in the range [0,
2^(bitLength)-1] which is probably prime. | |||||||||||
Constructs a new
BigInteger instance from the string
representation. | |||||||||||
Constructs a new
BigInteger instance from the string
representation. | |||||||||||
Constructs a new
BigInteger instance with the given sign and the
given magnitude. | |||||||||||
Constructs a new
BigInteger from the given two's complement
representation. |
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Returns a (new)
BigInteger whose value is the absolute value of
this . | |||||||||||
Returns a new
BigInteger whose value is this + val . | |||||||||||
Returns a new
BigInteger whose value is this & val . | |||||||||||
Returns a new
BigInteger whose value is this & ~val . | |||||||||||
Use
bitLength(0) if you want to know the length of the binary
value in bits. | |||||||||||
Returns the length of the value's two's complement representation without
leading zeros for positive numbers / without leading ones for negative
values.
| |||||||||||
Returns a new
BigInteger which has the same binary representation
as this but with the bit at position n cleared. | |||||||||||
Compares this
BigInteger with val . | |||||||||||
Returns a new
BigInteger whose value is this / divisor . | |||||||||||
Returns a
BigInteger array which contains this / divisor
at index 0 and this % divisor at index 1. | |||||||||||
Returns this
BigInteger as an double value. | |||||||||||
Returns
true if x is a BigInteger instance and if this
instance is equal to this BigInteger . | |||||||||||
Returns a new
BigInteger which has the same binary representation
as this but with the bit at position n flipped. | |||||||||||
Returns this
BigInteger as an float value. | |||||||||||
Returns a new
BigInteger whose value is greatest common divisor
of this and val . | |||||||||||
Returns the position of the lowest set bit in the two's complement
representation of this
BigInteger . | |||||||||||
Returns a hash code for this
BigInteger . | |||||||||||
Returns this
BigInteger as an int value. | |||||||||||
Tests whether this
BigInteger is probably prime. | |||||||||||
Returns this
BigInteger as an long value. | |||||||||||
Returns the maximum of this
BigInteger and val . | |||||||||||
Returns the minimum of this
BigInteger and val . | |||||||||||
Returns a new
BigInteger whose value is this mod m . | |||||||||||
Returns a new
BigInteger whose value is 1/this mod m . | |||||||||||
Returns a new
BigInteger whose value is this^exponent mod
m . | |||||||||||
Returns a new
BigInteger whose value is this * val . | |||||||||||
Returns a new
BigInteger whose value is the -this . | |||||||||||
Returns the smallest integer x >
this which is probably prime as
a BigInteger instance. | |||||||||||
Returns a new
BigInteger whose value is ~this . | |||||||||||
Returns a new
BigInteger whose value is this | val . | |||||||||||
Returns a new
BigInteger whose value is this ^ exp . | |||||||||||
Returns a random positive
BigInteger instance in the range [0,
2^(bitLength)-1] which is probably prime. | |||||||||||
Returns a new
BigInteger whose value is this % divisor . | |||||||||||
Returns a new
BigInteger which has the same binary representation
as this but with the bit at position n set. | |||||||||||
Returns a new
BigInteger whose value is this << n . | |||||||||||
Returns a new
BigInteger whose value is this >> n . | |||||||||||
Returns the sign of this
BigInteger . | |||||||||||
Returns a new
BigInteger whose value is this - val . | |||||||||||
Tests whether the bit at position n in
this is set. | |||||||||||
Returns the two's complement representation of this BigInteger in a byte
array.
| |||||||||||
Returns a string representation of this
BigInteger in decimal
form. | |||||||||||
Returns a string containing a string representation of this
BigInteger with base radix. | |||||||||||
Creates a new
BigInteger whose value is equal to the specified
long argument. | |||||||||||
Returns a new
BigInteger whose value is this ^ val . |
[Expand]
Inherited Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
From class java.lang.Number
| |||||||||||
From class java.lang.Object
| |||||||||||
From interface java.lang.Comparable
|
The BigInteger
constant 1.
The BigInteger
constant 10.
The BigInteger
constant 0.
Constructs a random non-negative BigInteger
instance in the range
[0, 2^(numBits)-1].
numBits | maximum length of the new BigInteger in bits. |
---|---|
rnd | is an optional random generator to be used. |
IllegalArgumentException | if numBits < 0. |
---|
Constructs a random BigInteger
instance in the range [0,
2^(bitLength)-1] which is probably prime. The probability that the
returned BigInteger
is prime is beyond (1-1/2^certainty).
Implementation Note:
Currently rnd
is ignored. The implementation always uses
method bn_rand
from the OpenSSL library. bn_rand
generates cryptographically strong pseudo-random numbers.
bitLength | length of the new BigInteger in bits. |
---|---|
certainty | tolerated primality uncertainty. |
rnd | is an optional random generator to be used. |
ArithmeticException | if bitLength < 2. |
---|
Constructs a new BigInteger
instance from the string
representation. The string representation consists of an optional minus
sign followed by a non-empty sequence of decimal digits.
val | string representation of the new BigInteger . |
---|
NullPointerException | if val == null . |
---|---|
NumberFormatException | if val is not a valid representation of a BigInteger . |
Constructs a new BigInteger
instance from the string
representation. The string representation consists of an optional minus
sign followed by a non-empty sequence of digits in the specified radix.
For the conversion the method Character.digit(char, radix)
is
used.
val | string representation of the new BigInteger . |
---|---|
radix | the base to be used for the conversion. |
NullPointerException | if val == null . |
---|---|
NumberFormatException | if val is not a valid representation of a BigInteger or if radix < Character.MIN_RADIX or
radix > Character.MAX_RADIX . |
Constructs a new BigInteger
instance with the given sign and the
given magnitude. The sign is given as an integer (-1 for negative, 0 for
zero, 1 for positive). The magnitude is specified as a byte array. The
most significant byte is the entry at index 0.
signum | sign of the new BigInteger (-1 for negative, 0 for
zero, 1 for positive). |
---|---|
magnitude | magnitude of the new BigInteger with the most
significant byte first. |
NullPointerException | if magnitude == null . |
---|---|
NumberFormatException | if the sign is not one of -1, 0, 1 or if the sign is zero and the magnitude contains non-zero entries. |
Constructs a new BigInteger
from the given two's complement
representation. The most significant byte is the entry at index 0. The
most significant bit of this entry determines the sign of the new BigInteger
instance. The given array must not be empty.
val | two's complement representation of the new BigInteger . |
---|
NullPointerException | if val == null . |
---|---|
NumberFormatException | if the length of val is zero. |
Returns a (new) BigInteger
whose value is the absolute value of
this
.
abs(this)
.Returns a new BigInteger
whose value is this + val
.
val | value to be added to this . |
---|
this + val
.NullPointerException | if val == null . |
---|
Returns a new BigInteger
whose value is this & val
.
Implementation Note: Usage of this method is not recommended as the current implementation is not efficient.
val | value to be and'ed with this . |
---|
this & val
.NullPointerException | if val == null . |
---|
Returns a new BigInteger
whose value is this & ~val
.
Evaluating x.andNot(val)
returns the same result as x.and(val.not())
.
Implementation Note: Usage of this method is not recommended as the current implementation is not efficient.
val | value to be not'ed and then and'ed with this . |
---|
this & ~val
.NullPointerException | if val == null . |
---|
Use bitLength(0)
if you want to know the length of the binary
value in bits.
Returns the number of bits in the binary representation of this
which differ from the sign bit. If this
is positive the result is
equivalent to the number of bits set in the binary representation of
this
. If this
is negative the result is equivalent to the
number of bits set in the binary representation of -this-1
.
Implementation Note: Usage of this method is not recommended as the current implementation is not efficient.
this
which
differ from the sign bitReturns the length of the value's two's complement representation without leading zeros for positive numbers / without leading ones for negative values.
The two's complement representation of this
will be at least
bitLength() + 1
bits long.
The value will fit into an int
if bitLength() < 32
or
into a long
if bitLength() < 64
.
this
without the sign bit.Returns a new BigInteger
which has the same binary representation
as this
but with the bit at position n cleared. The result is
equivalent to this & ~(2^n)
.
Implementation Note: Usage of this method is not recommended as the current implementation is not efficient.
n | position where the bit in this has to be cleared. |
---|
this & ~(2^n)
.ArithmeticException | if n < 0 . |
---|
Compares this BigInteger
with val
. Returns one of the
three values 1, 0, or -1.
val | value to be compared with this . |
---|
1
if this > val
, -1
if this < val
, 0
if this == val
.NullPointerException | if val == null . |
---|
Returns a new BigInteger
whose value is this / divisor
.
divisor | value by which this is divided. |
---|
this / divisor
.NullPointerException | if divisor == null . |
---|---|
ArithmeticException | if divisor == 0 . |
Returns a BigInteger
array which contains this / divisor
at index 0 and this % divisor
at index 1.
divisor | value by which this is divided. |
---|
[this / divisor, this % divisor]
.NullPointerException | if divisor == null . |
---|---|
ArithmeticException | if divisor == 0 . |
Returns this BigInteger
as an double value. If this
is
too big to be represented as an double, then Double.POSITIVE_INFINITY
or Double.NEGATIVE_INFINITY
is
returned. Note, that not all integers x in the range [-Double.MAX_VALUE,
Double.MAX_VALUE] can be represented as a double. The double
representation has a mantissa of length 53. For example, 2^53+1 =
9007199254740993 is returned as double 9007199254740992.0.
BigInteger
as a double valueReturns true
if x
is a BigInteger instance and if this
instance is equal to this BigInteger
.
x | object to be compared with this . |
---|
x
is a BigInteger and this == x
,
false
otherwise.Returns a new BigInteger
which has the same binary representation
as this
but with the bit at position n flipped. The result is
equivalent to this ^ 2^n
.
Implementation Note: Usage of this method is not recommended as the current implementation is not efficient.
n | position where the bit in this has to be flipped. |
---|
this ^ 2^n
.ArithmeticException | if n < 0 . |
---|
Returns this BigInteger
as an float value. If this
is too
big to be represented as an float, then Float.POSITIVE_INFINITY
or Float.NEGATIVE_INFINITY
is returned. Note, that not all
integers x in the range [-Float.MAX_VALUE, Float.MAX_VALUE] can be
represented as a float. The float representation has a mantissa of length
24. For example, 2^24+1 = 16777217 is returned as float 16777216.0.
BigInteger
as a float value.Returns a new BigInteger
whose value is greatest common divisor
of this
and val
. If this==0
and val==0
then zero is returned, otherwise the result is positive.
val | value with which the greatest common divisor is computed. |
---|
gcd(this, val)
.NullPointerException | if val == null . |
---|
Returns the position of the lowest set bit in the two's complement
representation of this BigInteger
. If all bits are zero (this=0)
then -1 is returned as result.
Implementation Note: Usage of this method is not recommended as the current implementation is not efficient.
this != 0
, -1
otherwiseReturns a hash code for this BigInteger
.
this
.Returns this BigInteger
as an int value. If this
is too
big to be represented as an int, then this
% 2^32 is returned.
BigInteger
as an int value.Tests whether this BigInteger
is probably prime. If true
is returned, then this is prime with a probability beyond
(1-1/2^certainty). If false
is returned, then this is definitely
composite. If the argument certainty
<= 0, then this method
returns true.
certainty | tolerated primality uncertainty. |
---|
true
, if this
is probably prime, false
otherwise.Returns this BigInteger
as an long value. If this
is too
big to be represented as an long, then this
% 2^64 is returned.
BigInteger
as a long value.Returns the maximum of this BigInteger
and val
.
val | value to be used to compute the maximum with this |
---|
max(this, val)
NullPointerException | if val == null |
---|
Returns the minimum of this BigInteger
and val
.
val | value to be used to compute the minimum with this . |
---|
min(this, val)
.NullPointerException | if val == null . |
---|
Returns a new BigInteger
whose value is this mod m
. The
modulus m
must be positive. The result is guaranteed to be in the
interval [0, m)
(0 inclusive, m exclusive). The behavior of this
function is not equivalent to the behavior of the % operator defined for
the built-in int
's.
m | the modulus. |
---|
this mod m
.NullPointerException | if m == null . |
---|---|
ArithmeticException | if m < 0 . |
Returns a new BigInteger
whose value is 1/this mod m
. The
modulus m
must be positive. The result is guaranteed to be in the
interval [0, m)
(0 inclusive, m exclusive). If this
is
not relatively prime to m, then an exception is thrown.
m | the modulus. |
---|
1/this mod m
.NullPointerException | if m == null |
---|---|
ArithmeticException | if m < 0 or if this is not relatively prime
to m |
Returns a new BigInteger
whose value is this^exponent mod
m
. The modulus m
must be positive. The result is guaranteed to
be in the interval [0, m)
(0 inclusive, m exclusive). If the
exponent is negative, then this.modInverse(m)^(-exponent) mod m)
is computed. The inverse of this only exists if this
is
relatively prime to m, otherwise an exception is thrown.
exponent | the exponent. |
---|---|
m | the modulus. |
this^exponent mod val
.NullPointerException | if m == null or exponent == null . |
---|---|
ArithmeticException | if m < 0 or if exponent<0 and this is not
relatively prime to m . |
Returns a new BigInteger
whose value is this * val
.
val | value to be multiplied with this . |
---|
this * val
.NullPointerException | if val == null . |
---|
Returns a new BigInteger
whose value is the -this
.
-this
.Returns the smallest integer x > this
which is probably prime as
a BigInteger
instance. The probability that the returned BigInteger
is prime is beyond (1-1/2^80).
this
which is robably prime.ArithmeticException | if this < 0 . |
---|
Returns a new BigInteger
whose value is ~this
. The result
of this operation is -this-1
.
Implementation Note: Usage of this method is not recommended as the current implementation is not efficient.
~this
.Returns a new BigInteger
whose value is this | val
.
Implementation Note: Usage of this method is not recommended as the current implementation is not efficient.
val | value to be or'ed with this . |
---|
this | val
.NullPointerException | if val == null . |
---|
Returns a new BigInteger
whose value is this ^ exp
.
exp | exponent to which this is raised. |
---|
this ^ exp
.ArithmeticException | if exp < 0 . |
---|
Returns a random positive BigInteger
instance in the range [0,
2^(bitLength)-1] which is probably prime. The probability that the
returned BigInteger
is prime is beyond (1-1/2^80).
Implementation Note: Currently rnd
is ignored.
bitLength | length of the new BigInteger in bits. |
---|---|
rnd | random generator used to generate the new BigInteger . |
BigInteger
instance.IllegalArgumentException | if bitLength < 2 . |
---|
Returns a new BigInteger
whose value is this % divisor
.
Regarding signs this methods has the same behavior as the % operator on
int's, i.e. the sign of the remainder is the same as the sign of this.
divisor | value by which this is divided. |
---|
this % divisor
.NullPointerException | if divisor == null . |
---|---|
ArithmeticException | if divisor == 0 . |
Returns a new BigInteger
which has the same binary representation
as this
but with the bit at position n set. The result is
equivalent to this | 2^n
.
Implementation Note: Usage of this method is not recommended as the current implementation is not efficient.
n | position where the bit in this has to be set. |
---|
this | 2^n
.ArithmeticException | if n < 0 . |
---|
Returns a new BigInteger
whose value is this << n
. The
result is equivalent to this * 2^n
if n >= 0. The shift distance
may be negative which means that this
is shifted right. The
result then corresponds to floor(this / 2^(-n))
.
Implementation Note: Usage of this method on negative values is not recommended as the current implementation is not efficient.
n | shift distance. |
---|
this << n
if n >= 0
; this >> (-n)
.
otherwiseReturns a new BigInteger
whose value is this >> n
. For
negative arguments, the result is also negative. The shift distance may
be negative which means that this
is shifted left.
Implementation Note: Usage of this method on negative values is not recommended as the current implementation is not efficient.
n | shift distance |
---|
this >> n
if n >= 0
; this << (-n)
otherwiseReturns the sign of this BigInteger
.
-1
if this < 0
,
0
if this == 0
,
1
if this > 0
.Returns a new BigInteger
whose value is this - val
.
val | value to be subtracted from this . |
---|
this - val
.NullPointerException | if val == null . |
---|
Tests whether the bit at position n in this
is set. The result is
equivalent to this & (2^n) != 0
.
Implementation Note: Usage of this method is not recommended as the current implementation is not efficient.
n | position where the bit in this has to be inspected. |
---|
this & (2^n) != 0
.ArithmeticException | if n < 0 . |
---|
Returns the two's complement representation of this BigInteger in a byte array.
this
.Returns a string representation of this BigInteger
in decimal
form.
this
in decimal form.Returns a string containing a string representation of this BigInteger
with base radix. If radix < Character.MIN_RADIX
or
radix > Character.MAX_RADIX
then a decimal representation is
returned. The characters of the string representation are generated with
method Character.forDigit
.
radix | base to be used for the string representation. |
---|
Creates a new BigInteger
whose value is equal to the specified
long
argument.
val | the value of the new BigInteger . |
---|
BigInteger
instance with the value val
.Returns a new BigInteger
whose value is this ^ val
.
Implementation Note: Usage of this method is not recommended as the current implementation is not efficient.
val | value to be xor'ed with this |
---|
this ^ val
NullPointerException | if val == null |
---|