Saltar al contenido

¿Cómo elevas un BigInteger de Java a la potencia de un BigInteger sin hacer aritmética modular?

Posteriormente a mirar en diferentes repositorios y sitios al terminar nos encontramos con la resolución que te mostraremos más adelante.

Solución:

No deberías tratar de calcular la potencia de un número extremadamente grande con otro número extremadamente grande. El número resultante usaría grandes cantidades de memoria. si calculas a.pow(b) tendrá aproximadamente log(a)*b dígitos Si b es demasiado grande para caber en un número entero, incluso para valores muy pequeños de a el resultado tendrá varios miles de millones de dígitos.

Trate de repensar lo que está tratando de lograr y cómo lograrlo sin hacer esta operación.

La solución práctica es convertir el exponente de un BigInteger a un int.

Si no puede hacer esto porque el exponente es demasiado grande, su algoritmo no se puede implementar. Es casi seguro que el número resultante sería demasiado grande para representarlo como un BigInteger. (Un BigInteger usa un array de bytes para representar el número y el tamaño máximo de un Java array es 2**31 - 1 elementos sin importar cuán grande sea el montón). E incluso si implementara una clase “BiggerInteger” que representaría el número, pronto estaría superando los límites del tamaño de la memoria física de su máquina. (Y el tiempo necesario para hacer el cálculo N.pow(M) sería… NP-complicado… O((MlogN)^M) Pienso).

Por supuesto, si el número del que estás tomando la potencia es 0, 1 o -1entonces el resultado encajará fácilmente en un BigInteger. Pero en esos casos, hay mejores formas de calcular la potencia :-).

Eres capaz de añadir valor a nuestro contenido informacional cooperando tu veteranía en las aclaraciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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