Clase BigInteger en Java

La clase BigInteger se usa para la operación matemática que involucra cálculos de enteros muy grandes que están fuera del límite de todos los tipos de datos primitivos disponibles.

De esta manera, la clase BigInteger es muy útil debido a su gran biblioteca de métodos y también se usa mucho en la programación competitiva. 
Ahora, a continuación, se proporciona una lista de declaraciones simples en aritmética primitiva y su declaración análoga en términos de objetos BigInteger.

Ejemplo:

int a, b;                
BigInteger A, B; 

La inicialización es la siguiente :

a = 54;
b = 23;
A  = BigInteger.valueOf(54);
B  = BigInteger.valueOf(37); 

Y para los números enteros disponibles como strings, puede inicializarlos de la siguiente manera:

A  = new BigInteger(“54”);
B  = new BigInteger(“123456789123456789”); 

Algunas constantes también se definen en la clase BigInteger para facilitar la inicialización de la siguiente manera:

A = BigInteger.ONE;
// Other than this, available constant are BigInteger.ZERO 
// and BigInteger.TEN 

Las operaciones matemáticas son las siguientes:  

int c = a + b;
BigInteger C = A.add(B); 

Otras funciones similares son restar(), multiplicar(), dividir(), resto(), pero todas estas funciones toman BigInteger como su argumento, por lo que si queremos esta operación con números enteros o strings, conviértalos a BigInteger antes de pasarlos a funciones como se muestra abajo: 

String str = “123456789”;
BigInteger C = A.add(new BigInteger(str));
int val  = 123456789;
BigInteger C = A.add(BigInteger.valueOf(val)); 

La extracción de valor de BigInteger es la siguiente:

int x   =  A.intValue();   // value should be in limit of int x
long y   = A.longValue();  // value should be in limit of long y
String z = A.toString();  

Comparación 

if (a < b) {}         // For primitive int
if (A.compareTo(B) < 0)  {} // For BigInteger 

En realidad, compareTo devuelve -1 (menor que), 0 (igual), 1 (mayor que) según los valores. Para la igualdad también podemos usar: 

if (A.equals(B)) {}  // A is equal to B 

Métodos de la clase BigInteger

Método Acción realizada
agregar (Valor entero grande) Devuelve un BigInteger cuyo valor es (this + val).
abdominales() Devuelve un BigInteger cuyo valor es el valor absoluto de este BigInteger.
y (Valor entero grande) Devuelve un BigInteger cuyo valor es (this & val).
andNot(Valor entero grande ) Devuelve un BigInteger cuyo valor es (this & ~val).
número de bits() Devuelve el número de bits en la representación en complemento a dos de este BigInteger que difieren de su bit de signo.
longitud de bit() Devuelve el número de bits en la representación mínima en complemento a dos de este BigInteger, excluyendo un bit de signo.
byteValueExact() Convierte este BigInteger en un byte, buscando información perdida.
clearBit(int n) Devuelve un BigInteger cuyo valor es equivalente a este BigInteger con el bit designado borrado.
comparar con (Valor entero grande) Compara este BigInteger con el BigInteger especificado.
dividir (Valor entero grande) Devuelve un BigInteger cuyo valor es (this/val).
divideYRemainder(BigInteger val) Devuelve una array de dos BigIntegers que contiene (this / val) seguido de (this % val).
valordoble() Convierte este BigInteger en un doble.
es igual a (Objeto x) Compara este BigInteger con el objeto especificado para la igualdad.
flipBit(int n) Devuelve un BigInteger cuyo valor es equivalente a este BigInteger con el bit designado invertido.
valor flotante() Convierte este BigInteger en un flotante.
mcd(Valor entero grande) Devuelve un BigInteger cuyo valor es el máximo común divisor de abs(this) y abs(val).
getLowestSetBit() Devuelve el índice del bit más a la derecha (orden más bajo) en este BigInteger (el número de bits cero a la derecha del bit más a la derecha).
código hash() Devuelve el código hash para este BigInteger.
 intValor() Convierte este BigInteger en un int.
intValorExact() Convierte este BigInteger en un int, buscando información perdida.
isProbablePrime(int certeza) Devuelve verdadero si este BigInteger es probablemente primo, falso si definitivamente es compuesto.
valorlargo() Convierte este BigInteger en un long.
valorlargoExacto() Convierte este BigInteger en un valor largo y comprueba si hay información perdida.
max(Valor entero grande) Devuelve el máximo de este BigInteger y val.
min(Valor entero grande ) Devuelve el mínimo de este BigInteger y val.
mod(Entero grande m Devuelve un BigInteger cuyo valor es (este mod m).
modInverse(BigInteger m) Devuelve un BigInteger cuyo valor es (this-1 mod m).
modPow(Exponente BigInteger, BigInteger m Devuelve un BigInteger cuyo valor es (este exponente mod m).
multiplicar (Valor entero grande) Devuelve un BigInteger cuyo valor es (este * val).
negar() Devuelve un BigInteger cuyo valor es (-this).
siguienteProbablePrime() Devuelve el primer entero mayor que este BigInteger que probablemente sea primo.
no() Devuelve un BigInteger cuyo valor es (~this).
o (Valor entero grande) Devuelve un BigInteger cuyo valor es (this | val).
pow(int exponente) Devuelve un BigInteger cuyo valor es (este exponente).
probablePrime(int bitLength, Random rnd) Devuelve un BigInteger positivo que probablemente sea primo, con la longitud de bits especificada.
resto (Valor entero grande) Devuelve un BigInteger cuyo valor es (este % val).
establecerBit(int n) Devuelve un BigInteger cuyo valor es equivalente a este BigInteger con el conjunto de bits designado.
shiftLeft(int n) Devuelve un BigInteger cuyo valor es (this << n).
shiftDerecha(int n) Devuelve un BigInteger cuyo valor es (this >> n).
shortValueExact() Convierte este BigInteger en un valor corto, verificando la información perdida.
signum() Devuelve la función signum de este BigInteger.
sqrt() Devuelve la raíz cuadrada entera de este BigInteger.
sqrtYRemainder() Devuelve una array de dos BigIntegers que contienen la raíz cuadrada entera s de this y su resto this – s*s, respectivamente.
restar (Valor entero grande) Devuelve un BigInteger cuyo valor es (this – val).
bit de prueba (int n) Devuelve verdadero si y solo si el bit designado está establecido.
toByteArray() Devuelve una array de bytes que contiene la representación en complemento a dos de este BigInteger.
Enstringr() Devuelve la representación de string decimal de este BigInteger.
toString(int radix) Devuelve la representación de string de este BigInteger en la base dada.
valueOf(valor largo) Devuelve un BigInteger cuyo valor es igual al del long especificado.
xor(Valor entero grande) Devuelve un BigInteger cuyo valor es (this ^ val).

Ilustración: 

El factorial de 100 contiene 158 dígitos, por lo que no podemos almacenarlo en ningún tipo de datos primitivo disponible. Podemos almacenar un entero tan grande como queramos en él. No hay límite teórico en el límite superior del rango porque la memoria se asigna dinámicamente, pero en la práctica, como la memoria es limitada, puede almacenar un número que tenga un número de bits Integer.MAX_VALUE que debería ser suficiente para almacenar la mayoría de los valores grandes.

Ejemplo:

Java

// Java program to find large factorials using BigInteger
import java.math.BigInteger;
import java.util.Scanner;
 
public class Example
{
    // Returns Factorial of N
    static BigInteger factorial(int N)
    {
        // Initialize result
        BigInteger f = new BigInteger("1"); // Or BigInteger.ONE
 
        // Multiply f with 2, 3, ...N
        for (int i = 2; i <= N; i++)
            f = f.multiply(BigInteger.valueOf(i));
 
        return f;
    }
 
    // Driver method
    public static void main(String args[]) throws Exception
    {
        int N = 20;
        System.out.println(factorial(N));
    }
}

Producción: 

2432902008176640000

Sugerencia: si tenemos que escribir el programa anterior en C++, sería demasiado grande y complejo, podemos mirar Factorial de número grande

Entonces, después del conocimiento anterior de la función de la clase BigInteger, podemos resolver muchos problemas complejos fácilmente, pero recuerde que como la clase BigInteger usa internamente una array de enteros para el procesamiento, la operación en un objeto de BigIntegers no es tan rápida como en las primitivas que son agregar la función en BigIntgers no toma el tiempo constante que toma el tiempo proporcional a la longitud de BigInteger, por lo que la complejidad del programa cambiará en consecuencia.

Este artículo es una contribución de Utkarsh Trivedi. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Debe leer:

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *