public class BigInteger extends Number implements Comparable<BigInteger>, Serializable
BitSet
for high-performance bitwise operations on
arbitrarily-large sequences of bits.Modifier and Type | Field and Description |
---|---|
static BigInteger |
ONE
The
BigInteger constant 1. |
static BigInteger |
TEN
The
BigInteger constant 10. |
static BigInteger |
ZERO
The
BigInteger constant 0. |
Constructor and Description |
---|
BigInteger(byte[] value)
Constructs a new
BigInteger from the given two's complement
representation. |
BigInteger(int signum,
byte[] magnitude)
Constructs a new
BigInteger instance with the given sign and
magnitude. |
BigInteger(int bitLength,
int certainty,
Random unused)
Constructs a random
BigInteger instance in the range [0,
pow(2, bitLength)-1] which is probably prime. |
BigInteger(int numBits,
Random random)
Constructs a random non-negative
BigInteger instance in the range
[0, pow(2, numBits)-1] . |
BigInteger(String value)
Constructs a new
BigInteger by parsing value . |
BigInteger(String value,
int radix)
Constructs a new
BigInteger instance by parsing value . |
Modifier and Type | Method and Description |
---|---|
BigInteger |
abs()
Returns a
BigInteger whose value is the absolute value of this . |
BigInteger |
add(BigInteger value)
Returns a
BigInteger whose value is this + value . |
BigInteger |
and(BigInteger value)
Returns a
BigInteger whose value is this & value . |
BigInteger |
andNot(BigInteger value)
Returns a
BigInteger whose value is this & ~value . |
int |
bitCount()
Returns the number of bits in the two's complement representation of
this which differ from the sign bit. |
int |
bitLength()
Returns the length of the value's two's complement representation without
leading zeros for positive numbers / without leading ones for negative
values.
|
BigInteger |
clearBit(int n)
Returns a
BigInteger which has the same binary representation
as this but with the bit at position n cleared. |
int |
compareTo(BigInteger value)
Compares this
BigInteger with value . |
BigInteger |
divide(BigInteger divisor)
Returns a
BigInteger whose value is this / divisor . |
BigInteger[] |
divideAndRemainder(BigInteger divisor)
Returns a two element
BigInteger array containing
this / divisor at index 0 and this % divisor at index 1. |
double |
doubleValue()
Returns this
BigInteger as a double. |
boolean |
equals(Object x)
Compares this instance with the specified object and indicates if they
are equal.
|
BigInteger |
flipBit(int n)
Returns a
BigInteger which has the same binary representation
as this but with the bit at position n flipped. |
float |
floatValue()
Returns this
BigInteger as a float. |
BigInteger |
gcd(BigInteger value)
Returns a
BigInteger whose value is greatest common divisor
of this and value . |
int |
getLowestSetBit()
Returns the position of the lowest set bit in the two's complement
representation of this
BigInteger . |
int |
hashCode()
Returns an integer hash code for this object.
|
int |
intValue()
Returns this
BigInteger as an int value. |
boolean |
isProbablePrime(int certainty)
Tests whether this
BigInteger is probably prime. |
long |
longValue()
Returns this
BigInteger as a long value. |
BigInteger |
max(BigInteger value)
Returns the maximum of this
BigInteger and value . |
BigInteger |
min(BigInteger value)
Returns the minimum of this
BigInteger and value . |
BigInteger |
mod(BigInteger m)
Returns a
BigInteger whose value is this mod m . |
BigInteger |
modInverse(BigInteger m)
Returns a
BigInteger whose value is 1/this mod m . |
BigInteger |
modPow(BigInteger exponent,
BigInteger m)
Returns a
BigInteger whose value is pow(this, exponent) mod m . |
BigInteger |
multiply(BigInteger value)
Returns a
BigInteger whose value is this * value . |
BigInteger |
negate()
Returns a
BigInteger whose value is the -this . |
BigInteger |
nextProbablePrime()
Returns the smallest integer x >
this which is probably prime as
a BigInteger instance. |
BigInteger |
not()
Returns a
BigInteger whose value is ~this . |
BigInteger |
or(BigInteger value)
Returns a
BigInteger whose value is this | value . |
BigInteger |
pow(int exp)
Returns a
BigInteger whose value is pow(this, exp) . |
static BigInteger |
probablePrime(int bitLength,
Random unused)
Returns a random positive
BigInteger instance in the range [0, pow(2, bitLength)-1] which is probably prime. |
BigInteger |
remainder(BigInteger divisor)
Returns a
BigInteger whose value is this % divisor . |
BigInteger |
setBit(int n)
Returns a
BigInteger which has the same binary representation
as this but with the bit at position n set. |
BigInteger |
shiftLeft(int n)
Returns a
BigInteger whose value is this << n . |
BigInteger |
shiftRight(int n)
Returns a
BigInteger whose value is this >> n . |
int |
signum()
Returns the sign of this
BigInteger . |
BigInteger |
subtract(BigInteger value)
Returns a
BigInteger whose value is this - value . |
boolean |
testBit(int n)
Tests whether the bit at position n in
this is set. |
byte[] |
toByteArray()
Returns the two's complement representation of this
BigInteger in
a byte array. |
String |
toString()
Returns a string representation of this
BigInteger in decimal
form. |
String |
toString(int radix)
Returns a string containing a string representation of this
BigInteger with base radix. |
static BigInteger |
valueOf(long value)
Returns a
BigInteger whose value is equal to value . |
BigInteger |
xor(BigInteger value)
Returns a
BigInteger whose value is this ^ value . |
byteValue, shortValue
public static final BigInteger ZERO
BigInteger
constant 0.public static final BigInteger ONE
BigInteger
constant 1.public static final BigInteger TEN
BigInteger
constant 10.public BigInteger(int numBits, Random random)
BigInteger
instance in the range
[0, pow(2, numBits)-1]
.numBits
- maximum length of the new BigInteger
in bits.random
- is the random number generator to be used.IllegalArgumentException
- if numBits
< 0.public BigInteger(int bitLength, int certainty, Random unused)
BigInteger
instance in the range [0,
pow(2, bitLength)-1]
which is probably prime. The probability that the
returned BigInteger
is prime is beyond
1 - 1/pow(2, certainty)
.
Implementation Note: the Random
argument is ignored.
This implementation uses OpenSSL's bn_rand
as a source of
cryptographically strong pseudo-random numbers.
bitLength
- length of the new BigInteger
in bits.certainty
- tolerated primality uncertainty.ArithmeticException
- if bitLength < 2
.public BigInteger(String value)
BigInteger
by parsing value
. The string
representation consists of an optional plus or minus sign followed by a
non-empty sequence of decimal digits. Digits are interpreted as if by
Character.digit(char,10)
.value
- string representation of the new BigInteger
.NullPointerException
- if value == null
.NumberFormatException
- if value
is not a valid
representation of a BigInteger
.public BigInteger(String value, int radix)
BigInteger
instance by parsing value
.
The string representation consists of an optional plus or minus sign
followed by a non-empty sequence of digits in the specified radix. Digits
are interpreted as if by Character.digit(char, radix)
.value
- string representation of the new BigInteger
.radix
- the base to be used for the conversion.NullPointerException
- if value == null
.NumberFormatException
- if value
is not a valid
representation of a BigInteger
or if radix <
Character.MIN_RADIX
or radix > Character.MAX_RADIX
.public BigInteger(int signum, byte[] magnitude)
BigInteger
instance with the given sign and
magnitude.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.public BigInteger(byte[] value)
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 array must be nonempty.value
- two's complement representation of the new BigInteger
.NullPointerException
- if value == null
.NumberFormatException
- if the length of value
is zero.public static BigInteger valueOf(long value)
BigInteger
whose value is equal to value
.public byte[] toByteArray()
BigInteger
in
a byte array.public BigInteger abs()
BigInteger
whose value is the absolute value of this
.public BigInteger negate()
BigInteger
whose value is the -this
.public BigInteger add(BigInteger value)
BigInteger
whose value is this + value
.public BigInteger subtract(BigInteger value)
BigInteger
whose value is this - value
.public int signum()
BigInteger
.-1
if this < 0
, 0
if this == 0
,
1
if this > 0
.public BigInteger shiftRight(int n)
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 distancethis >> n
if n >= 0
; this << (-n)
otherwisepublic BigInteger shiftLeft(int n)
BigInteger
whose value is this << n
. The
result is equivalent to this * pow(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 / pow(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)
.
otherwisepublic int bitLength()
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.public boolean testBit(int n)
this
is set. The result is
equivalent to this & pow(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.ArithmeticException
- if n < 0
.public BigInteger setBit(int n)
BigInteger
which has the same binary representation
as this
but with the bit at position n set. The result is
equivalent to this | pow(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.ArithmeticException
- if n < 0
.public BigInteger clearBit(int n)
BigInteger
which has the same binary representation
as this
but with the bit at position n cleared. The result is
equivalent to this & ~pow(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.ArithmeticException
- if n < 0
.public BigInteger flipBit(int n)
BigInteger
which has the same binary representation
as this
but with the bit at position n flipped. The result is
equivalent to this ^ pow(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.ArithmeticException
- if n < 0
.public int getLowestSetBit()
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.
public int bitCount()
this
which differ from the sign bit. If this
is negative,
the result is equivalent to the number of bits set in the two's
complement representation of -this - 1
.
Use bitLength(0)
to find the length of the binary value in
bits.
Implementation Note: Usage of this method is not recommended as the current implementation is not efficient.
public BigInteger not()
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.
public BigInteger and(BigInteger value)
BigInteger
whose value is this & value
.
Implementation Note: Usage of this method is not recommended as the current implementation is not efficient.
value
- value to be and'ed with this
.NullPointerException
- if value == null
.public BigInteger or(BigInteger value)
BigInteger
whose value is this | value
.
Implementation Note: Usage of this method is not recommended as the current implementation is not efficient.
value
- value to be or'ed with this
.NullPointerException
- if value == null
.public BigInteger xor(BigInteger value)
BigInteger
whose value is this ^ value
.
Implementation Note: Usage of this method is not recommended as the current implementation is not efficient.
value
- value to be xor'ed with this
NullPointerException
- if value == null
public BigInteger andNot(BigInteger value)
BigInteger
whose value is this & ~value
.
Evaluating x.andNot(value)
returns the same result as x.and(value.not())
.
Implementation Note: Usage of this method is not recommended as the current implementation is not efficient.
value
- value to be not'ed and then and'ed with this
.NullPointerException
- if value == null
.public int intValue()
BigInteger
as an int value. If this
is too
big to be represented as an int, then this % (1 << 32)
is
returned.public long longValue()
BigInteger
as a long value. If this
is too
big to be represented as a long, then this % pow(2, 64)
is
returned.public float floatValue()
BigInteger
as a float. If this
is too big to
be represented as a float, then Float.POSITIVE_INFINITY
or
Float.NEGATIVE_INFINITY
is returned. Note that not all integers
in the range [-Float.MAX_VALUE, Float.MAX_VALUE]
can be exactly
represented as a float.floatValue
in class Number
public double doubleValue()
BigInteger
as a double. If this
is too big
to be represented as a double, then Double.POSITIVE_INFINITY
or
Double.NEGATIVE_INFINITY
is returned. Note that not all integers
in the range [-Double.MAX_VALUE, Double.MAX_VALUE]
can be exactly
represented as a double.doubleValue
in class Number
public int compareTo(BigInteger value)
BigInteger
with value
. Returns -1
if this < value
, 0
if this == value
and 1
if this > value
, .compareTo
in interface Comparable<BigInteger>
value
- value to be compared with this
.another
;
a positive integer if this instance is greater than
another
; 0 if this instance has the same order as
another
.NullPointerException
- if value == null
.public BigInteger min(BigInteger value)
BigInteger
and value
.value
- value to be used to compute the minimum with this
.NullPointerException
- if value == null
.public BigInteger max(BigInteger value)
BigInteger
and value
.value
- value to be used to compute the maximum with this
NullPointerException
- if value == null
public int hashCode()
Object
Object.equals(java.lang.Object)
returns true
must return
the same hash code value. This means that subclasses of Object
usually override both methods or neither method.
Note that hash values must not change over time unless information used in equals comparisons also changes.
See Writing a correct
hashCode
method
if you intend implementing your own hashCode
method.
hashCode
in class Object
Object.equals(java.lang.Object)
public boolean equals(Object x)
Object
o
must represent the same object
as this instance using a class-specific comparison. The general contract
is that this comparison should be reflexive, symmetric, and transitive.
Also, no object reference other than null is equal to null.
The default implementation returns true
only if this ==
o
. See Writing a correct
equals
method
if you intend implementing your own equals
method.
The general contract for the equals
and Object.hashCode()
methods is that if equals
returns true
for
any two objects, then hashCode()
must return the same value for
these objects. This means that subclasses of Object
usually
override either both methods or neither of them.
equals
in class Object
x
- the object to compare this instance with.true
if the specified object is equal to this Object
; false
otherwise.Object.hashCode()
public String toString()
BigInteger
in decimal
form.public String toString(int radix)
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.public BigInteger gcd(BigInteger value)
BigInteger
whose value is greatest common divisor
of this
and value
. If this == 0
and value == 0
then zero is returned, otherwise the result is positive.value
- value with which the greatest common divisor is computed.NullPointerException
- if value == null
.public BigInteger multiply(BigInteger value)
BigInteger
whose value is this * value
.NullPointerException
- if value == null
.public BigInteger pow(int exp)
BigInteger
whose value is pow(this, exp)
.ArithmeticException
- if exp < 0
.public BigInteger[] divideAndRemainder(BigInteger divisor)
BigInteger
array containing
this / divisor
at index 0 and this % divisor
at index 1.divisor
- value by which this
is divided.NullPointerException
- if divisor == null
.ArithmeticException
- if divisor == 0
.divide(java.math.BigInteger)
,
remainder(java.math.BigInteger)
public BigInteger divide(BigInteger divisor)
BigInteger
whose value is this / divisor
.divisor
- value by which this
is divided.this / divisor
.NullPointerException
- if divisor == null
.ArithmeticException
- if divisor == 0
.public BigInteger remainder(BigInteger divisor)
BigInteger
whose value is this % divisor
.
Regarding signs this methods has the same behavior as the % operator on
ints: the sign of the remainder is the same as the sign of this.divisor
- value by which this
is divided.NullPointerException
- if divisor == null
.ArithmeticException
- if divisor == 0
.public BigInteger modInverse(BigInteger m)
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.NullPointerException
- if m == null
ArithmeticException
- if m < 0 or
if this
is not
relatively prime to m
public BigInteger modPow(BigInteger exponent, BigInteger m)
BigInteger
whose value is pow(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 pow(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.NullPointerException
- if m == null
or exponent ==
null
.ArithmeticException
- if m < 0
or if exponent<0
and
this is not relatively prime to m
.public BigInteger mod(BigInteger m)
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
.public boolean isProbablePrime(int certainty)
BigInteger
is probably prime. If true
is returned, then this is prime with a probability beyond
1 - 1/pow(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.public BigInteger nextProbablePrime()
this
which is probably prime as
a BigInteger
instance. The probability that the returned BigInteger
is prime is beyond 1 - 1/pow(2, 80)
.this
which is probably prime.ArithmeticException
- if this < 0
.public static BigInteger probablePrime(int bitLength, Random unused)
BigInteger
instance in the range [0, pow(2, bitLength)-1]
which is probably prime. The probability that
the returned BigInteger
is prime is beyond 1 - 1/pow(2, 80)
.
Implementation Note: Currently random
is ignored.
bitLength
- length of the new BigInteger
in bits.BigInteger
instance.IllegalArgumentException
- if bitLength < 2
.