Cuando era joven (no hace tantos años), no había computadoras en casa y me enseñaron a hacer ese tipo de cálculos utilizando la ''tabla de logaritmos'', un pequeño libro en el que era posible encontrar los logaritmos (en base $10$) de los números.
¡Así era como se hacían los cálculos antes de las computadoras! ¡Y aún funciona hoy en día!
Entonces, para tu cálculo podemos hacer lo siguiente:
$$ \log_{10}\left(2^{250000}\right)=250000 \times \log_{10} 2 $$
De mis tablas encontré que $\log_{10} 2=0.3010299$ (claramente, el problema es la precisión que está limitada por el número de dígitos en las tablas, pero para este propósito $7$ dígitos parecen ser suficientes).
Entonces, con una simple multiplicación tenemos:
$$ 2^{250000} \approx 10^{75257.475}=\left(10^{10000}\right)^{7.5257475} $$ O, como sugiere @mathmandan (¡gracias!): $$ 2^{250000} \approx 10^{75257.475}=10^{75257}\times 10^{0.475} $$ y mis ''tablas mágicas'' dicen que $10^{0.475}\approx 2.9853826$.
7 votos
No necesitas una supercomputadora, una computadora de escritorio o portátil no demasiado antigua puede manejar eso fácilmente. Si quieres hacerlo manualmente, tomará un tiempo, especialmente la verificación de errores de cálculo.
11 votos
En cualquier computadora Unix, prueba
echo '2^250000' |bc
. Mi portátil de 3 años lo ejecutó en 0.64 segundos. Esto no es en absoluto una potencia "absurdamente alta".5 votos
En mi teléfono, calcular $2^{2500000}$ toma un poco menos de 2 segundos.
2 votos
Python que se ejecuta en mi laptop tarda menos de 0.1s (promedio de múltiples ejecuciones usando el módulo
timeit
) en ejecutarstr(2**250000)
, que calcula la representación en base 10.2**250000
por sí solo tarda 20 nanosegundos, pero eso es un poco tramposo ya que está calculando en base 2 y posiblemente toma un "atajo".20 votos
@SteveJessop Puedo determinar la expansión binaria de
2**250000
en menos de un segundo, incluso sin una computadora.1 votos
@SteveJessop En realidad, ese tiempo sería incorrecto. Python precalcula esos valores durante la optimización de peephole al producir el bytecode inicial (que creo que
timeit
reutiliza para todas las ejecuciones), por lo que simplemente mediste el tiempo que tomó convertir a cadena. Intentaa=2; b=250000; str(a**b)
para evitar esas optimizaciones.0 votos
Iba a publicar la expansión decimal completa en una respuesta, pero desafortunadamente no se permite publicar más de 30000 caracteres...
0 votos
Creo que es posible a) encontrar cuántos dígitos hay y b) encontrar cuál es el último decimal $n$, utilizando aritmética modular. Si eso es lo que deseas hacer para encontrar dicha solución.
0 votos
Si vas a la googología y encuentras el número de Graham, te muestran cómo encontrar manualmente los dígitos de un 'número absurdamente grande'.
0 votos
Curiosamente, el orden en el que aparecen los dígitos base-$10$ en este número, $3,1,5,4,9,6,2,8,7,0$, es notablemente similar al orden en el que aparecen los dígitos base-$10$ en la expansión decimal de $\pi$: $3,1,4,5,9,2,6,8,7,0$.
0 votos
Estaría sorprendido si algún entorno cuerdo realmente calcula esto en lugar de simplemente llenar el número en representación binaria en el lugar correcto en la memoria.
1 votos
Piénsalo de esta manera. Ese número en binario ocupa aproximadamente 25 kilobytes. La máquina en la que estoy escribiendo esto tiene ocho millones de kilobytes de RAM. Tu número es un número muy pequeño comparado con los tipos de números que podemos representar en la memoria si queremos. Simplemente rara vez queremos.
0 votos
@Bakuriu: genial, gracias. Eso ralentiza el
str
a 106 mseg de 96, y la versión base-2 de 20 nanosegundos a 1mseg (no sé por qué las diferencias de tiempo no son iguales, por lo que puede haber incluso más cosas en juego). De todos modos, Python y los humanos están de acuerdo en que es mucho más fácil en base 2 que en base 10 ;-)