40 votos

¿Cuál es el *medio* dígito de $3^{100000}$?

La representación decimal de $3^{100000}$ tiene $47713$ dígitos. ¿Cuál es la $23857^{th}$ dígito - es decir, el uno en el $10^{23856}$'s place?

Hay un montón de preguntas en este sitio pidiendo el último dígito de varias grandes exponentes, que son bien manejados por la aritmética modular. El último dígito de $3^{100000}$ es $1$ por dichos métodos. Hay algunas menor número de preguntas para el primer dígito de un número, que puede ser manejado por considerar la parte fraccionaria de la base de diez logaritmo del número. El primer dígito del número es de $1$.

El método puede ser modificado para dar los primeros o últimos dígitos, pero no generalizar más allá de eso, y no hay ninguna manera obvia de combinar los métodos.

Hay un método para encontrar arbitraria dígitos de enteros pequeños elevado a los grandes? ¿Hay alguna razón para sospechar de que la computación de un dígito en el medio es, en términos de complejidad computacional, un problema más difícil de cómputo dígitos en el borde?

6voto

Han de Bruijn Puntos 6161

En contraste con otros lenguajes de programación de su tiempo, Pascal (lenguaje de programación) también es compatible con un tipo de conjunto, implementado como un patrón de bits. Los patrones de bits asociados con el Pascal tipo de conjunto es de $256$ bits de ancho, pero esta limitación no es esencial y puede ser reemplazado con otros (más grandes), los valores de tiempo. Ver Wikipedia para una referencia. Más bien una descripción detallada del tipo de conjunto de la aplicación se puede encontrar así. Así tenemos la siguiente práctica:

  • un patrón de bits en un equipo es un conjunto de tipo

También sabemos que

  • un patrón de bits en un equipo es un número natural tipo

De hecho, todo el mundo sabe que un número natural puede ser representado como un binario es decir, un patrón de bits. La palabra "tipo" se ha empleado aquí con el fin de evitar la confusión con otros (me.e la matemática estándar) "set" y "número" definiciones.
Más precisamente: la hereditariamente finitos conjuntos están en una correspondencia uno a uno con los números naturales. Y el segundo hecho es independiente de los ordenadores.
Ejemplos. $$ \begin{array}{l} 0 = 000 = \{\} \\ 1 = 001 = \{0\} = \{\{\}\} \\ 2 = 010 = \{1\} = \{\{\{\}\}\} \\ 3 = 011 = \{0\; 1\} = \{\{\}\{\{\}\}\} \\ 4 = 100 = \{2\} = \{\{\{\{\}\}\}\} \\ 5 = 101 = \{0\; 2\} = \{\{\}\{\{\{\}\}\}\} \\ 6 = 110 = \{1\; 2\} = \{\{\{\}\}\{\{\{\}\}\}\} \\ 7 = 111 = \{0\; 1\; 2\} = \{\{\}\{\{\}\}\{\{\{\}\}\}\} \\ \cdots \end{array} $$ Lo anterior está relacionado con la siguiente referencia, por Alexander Abian y Samuel LaMacchia:

Si las llaves $\{\}$ son reemplazados por corchetes $\left[\,\right]$, a continuación, otro hecho importante se observa:

  • un tipo de conjunto es un número natural es un tipo ordenan números naturales de tipo de matriz

Si ahora nos idear un equivalente de la escuela primaria, el número de operaciones con matrices ordenadas, a continuación, hemos virtual ilimitado de precisión a nuestra disposición. Que este enfoque realmente funciona, debe ser demostrado en la mano de el OP pregunta. Aquí hay un enlace a la completa (Delphi Pascal), programa que hace el trabajo:

Y aquí hay un enlace a la cantidad de $3^{100000}$, que es demasiado grande para caber en MSE márgenes:

La salida por pantalla de este programa es el número de dígitos, el primero, el medio y el último dígito:

47713
1 21

Así que, de hecho, como Lucian dice en un comentario: es "obvio" que los dígitos en el centro es de $\large\, 2$ .

Nota. Una potencia como $\,3^{100000}\,$ suena muy impresionante, pero con un smart algoritmo, el número de operaciones es de sólo $\,\ln_2(100000)\approx17$ . Para los números reales $\,x\,$ natural $\n\,$ se va como sigue:

función de la potencia(x : double; n : integer) : doble;
var
 m : integer;
 p, y : doble;
comenzar
 m := n; y := x; p := 1;
 mientras que m > 0 do begin
 si (m y 1) > 0, entonces p := p * y;
 m := m shr 1; { m := m / 2 }
 y := y * y;
end;
 potencia := p;
end;

Wikipedia referencia: cálculo Eficiente con exponentes de números enteros .

2voto

CodingBytes Puntos 102

Me preguntaba cómo Lucian podía llegar al resultado correcto dentro de una hora después de la pregunta apareció. Así que me dio Mathematica una oportunidad. Aquí está el resultado:

enter image description here

2voto

gumkins Puntos 113

Aparte de casos especiales en los 'trucos' podría ayudar en la solución de una respuesta específica, sospecho que la búsqueda de un arbitrario dígitos o una rebanada de dígitos aproximadamente reduce a la vez la complejidad de la conversión de la base. Por ejemplo, si usted quiere saber el medio (y sólo medio!) dígito de un número con un número impar de dígitos, puede ser en realidad un truco especial a través de la aritmética modular para obtener la respuesta rápidamente. No me sé de uno, tal vez Lucian .

Sin embargo, si usted quiere saber arbitraria dígitos de $N=b^k$, creo que la respuesta a tu pregunta es similar a sabiendas de la complejidad de la conversión de la base de la base b a la base 10.

Áspero argumento

Almacenamiento de $N=b^k$ en base 10 se requieren $ \lceil \log_{10}(N)\rceil=\lceil k*\log_{10}(b)\rceil$ dígitos.

Computación N por repetir la cuadratura se requieren $\lceil \log_2(k) \rceil$ multiplicación de las operaciones de cada uno de los cuales consiste en la actualización de los $\lceil k*\log_{10}(b) \rceil$ elementos de la representación.

Por lo tanto, parece que usted está delimitada por $ O(k*log_2(k))$ operaciones como $k$ aumenta.

Esto difiere por un factor de $k$ de aritmética modular trucos que suele llegar a los últimos dígitos en $O(log_2(k))$ tiempo (es decir, si el uso de la misma, se repite el cuadrado de enfoque).

Entonces, ¿dónde está la diferencia?
El 'truco' con la primera/última dígitos es restringir la representación a una constante fija. Aunque $k$ puede ser más grande en $b^k$, la representación de tu respuesta no tiene que crecer, por lo que la primera/última dígitos puede ser calculada de manera eficiente.

Así que creo que la verdadera pregunta que subyace es:

Puede arbitraria dígitos de $N=b^k$ ser determinado con una representación de ancho fijo (número fijo de bits)?

-2voto

Paiam Risarki Puntos 74

Utilizando un programa de ordenador (que sólo calcula el número entero y extraer la necesaria dígitos), he encontrado que la respuesta es 7.

Este es el programa (que es en Haskell):

digits :: Integer -> [Int]
digits = map (read . (:[])) . show

main = print ((digits (3^100000)) !! 23857)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X