14 votos

Fórmula para invertir los dígitos de un entero positivo $n$

Pude resolver los casos de $n$ teniendo hasta $4$ dígitos y se preguntaba si alguien podría verificar mi generalización a $m$ dígitos. Aquí estoy asumiendo que cuando una inversión resulta en que haya un $0$ se ignora (por ejemplo $76130$ se invierte en $3167$ , $998700$ a $7899$ etc.)

Creo que la función puede expresarse como $r(n): \mathbb{N} \rightarrow \mathbb{N}$ $$r(n) = \left \lfloor \frac{n}{10^m}\right \rfloor +\sum_{k=0}^{m-1}10^{m-k} \left( \left \lfloor\frac{n}{10^k} \right \rfloor-10 \left \lfloor \frac{\left \lfloor \frac{n}{10^k}\right \rfloor}{10}\right \rfloor \right)$$

donde de nuevo, $n$ tiene $m$ dígitos.

Parece que esta combinación de la función suelo y las potencias de 10 es la única forma de conseguirlo, pero ¿es esto cierto?

0 votos

Me resulta difícil imaginar que este tipo de fórmula tenga alguna utilidad teórica o numérica... Véase la "inversión de bits" para la base dos. Y esto relacionado (¿dup?) math.stackexchange.com/questions/323268/

2 votos

Nota: Si se eliminan los ceros iniciales, aplicar la operación de inversión dos veces no será la identidad.

9voto

DiGi Puntos 1925

Su primer término es siempre $0$ porque $\lfloor \log_{10} n \rfloor = m-1$ y te equivocas por un factor de $10$ por ejemplo, mediante su fórmula

$$\begin{align*} r(123)&=\left\lfloor\frac{123}{1000}\right\rfloor+\sum_{k=0}^210^{3-k}\left(\left\lfloor\frac{123}{10^k}\right\rfloor-10\left\lfloor\frac1{10}\left\lfloor\frac{123}{10^k}\right\rfloor\right\rfloor\right)\\\\ &=0+1000(123-120)+100(12-10)+10(1-0)\\ &=3210 \end{align*}$$

en lugar del correcto $321$ . Sin embargo,

$$r(n)=\sum_{k=0}^{m-1}10^{m-1-k}\left(\left\lfloor\frac{n}{10^k}\right\rfloor-10\left\lfloor\frac1{10}\left\lfloor\frac{n}{10^k}\right\rfloor\right\rfloor\right)$$

hace el truco.

Supongamos que $n=\sum_{i=0}^{m-1}d_k10^i$ donde cada $d_i\in\{0,1,\dots,9\}$ y $d_{m-1}\ne 0$ para que la expansión decimal de $n$ es $d_{m-1}d_{m-2}\ldots d_1d_0$ . Entonces

$$\left\lfloor\frac{n}{10^k}\right\rfloor=\sum_{i=k}^{m-1}d_i10^{i-k}=10\sum_{i=k+1}^{m-1}d_i10^{i-k}+d_k\;,$$

así que

$$\left\lfloor\frac{n}{10^k}\right\rfloor-10\left\lfloor\frac1{10}\left\lfloor\frac{n}{10^k}\right\rfloor\right\rfloor=\left(10\sum_{i=k+1}^{m-1}d_i10^{i-k}+d_k\right)-10\sum_{i=k+1}^{m-1}d_i10^{i-k}=d_k\;,$$

y

$$r(n)=\sum_{k=0}^{m-1}10^{m-1-k}d_k=\sum_{k=0}^{m-1}d_{(m-1)-k}10^k\;,$$

cuya expansión decimal es $d_0d_1\ldots d_{m-2}d_{m-1}$ , según se desee.

0 votos

Sí, así es. No sé cómo se me pasó eso. Gracias por comprobar mi fórmula.

0 votos

@Patrick: De nada.

3voto

arbabnazar Puntos 111

Esto es lo que se me ocurrió: $$\sum_{k=1}^{n}10^{k-1}\frac{xmod10^{n-k-1}-xmod10^{n-k}}{10^{n-k}}$$ Donde n es el número de dígitos del número x, podría sustituirse por $\lfloor{log_{b}x}\rfloor+1$
Creo que funciona en diferentes bases (sólo hay que cambiar 10 por la base deseada), ¡aunque sólo se ha probado en base 10! Tomando el primer término k = 1, con n = 3 por ejemplo da: $$\frac{xmod1000-xmod100}{100}$$ El $xmod1000$ devuelve el número original, el término $xmod100$ devuelve el resto después de la división por 100 que será el número de dos dígitos después del "número de centenas", el resultado será entonces el número de centenas, por ejemplo, para 345 el numerador será 300, dividiendo por 100 devuelve 3. El siguiente término de la serie hace esencialmente lo mismo, la fracción devuelve el valor de la siguiente potencia de diez junto con una diferencia importante; el $10^{k-1}$ hace que el dígito valga diez veces más de lo que valía, así que en el ejemplo del 345 el 3 valdrá 3 en lugar de 300, el for seguirá teniendo el mismo valor de 40 y el 5 valdrá 500 porque $10^{3-1}$ = 100 por lo que en el tercer paso el valor de la fracción es igual a 100 veces el valor del dígito en el tercer lugar. Sumando todos los términos se invierte el número 345 se convierte en 543, 1432 se convierte en 2341. Si mi explicación no es clara, avísame.

2voto

Adam L Puntos 1270

Empezamos de nuevo con el delta de Kronecker:

$$\delta \left( x,y \right) =\cases{1&$ x=y $\cr 0&$ x\neq y $\cr}\quad\qquad\quad\qquad\quad\qquad\quad\qquad\quad\qquad\quad\qquad\quad\qquad\quad\quad\quad\quad\quad\quad\quad\text{ (1)}$$

Lo que nos permite expresar los dígitos de un número 'a' en base 'b' en una secuencia entera computable, en la que ya conocemos la longitud exacta de la secuencia que es, por supuesto, el número de dígitos en total. La expresión para este cálculo es:

$$d_{{n}} \left( a,b \right) =\sum _{k=1}^{ \Bigl\lfloor {\frac { \ln \left( a \right) }{\ln \left( b \right) }}\Bigr\rfloor +1} \left( \delta \left( n,k \right) -b\delta \left( n,k+1 \right) \right) \Bigl\lfloor{a{b}^{k- {\Bigl\lfloor\frac {\ln \left( a\right) }{\ln \left( b \right) }\Bigr\rfloor} -1}} \Bigr\rfloor \quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad$$

Por ejemplo, $a=12345$ en la base $b=10:$ se evaluará, casualmente, a la progresión aritmética con valor inicial de 1 y d=1 de longitud 5: $$\left\{ d_{{1}} \left( 12345,10 \right) ,d_{{2}} \left( 12345,10 \right) ,d_{{3}} \left( 12345,10 \right) ,d_{{4}} \left( 12345,10 \right) ,d_{{5}} \left( 12345,10 \right) \right\} = \left\{ 1,2,3,4, 5 \right\} $$

Pero este(2) calculará el $n^{th}$ dígito para el número en cualquier base $b>1$ y, por tanto, estos valores corresponden a los coeficientes de la expansión b-ádica * del número por lo que tenemos lo siguiente:

$$\mathcal{P} \left( a,b \right) =\sum _{n=0}^{ \Bigl\lfloor { \frac {\ln \left( a \right) }{\ln \left( b \right) }} \Bigr\rfloor +1}d_{ {n}} \left( a,b \right) {b}^{n}\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\text{ (3)} $$

Y a partir de esto podemos realizar la inversión de dígitos de la siguiente manera en cualquier base por lo que puedo adivinar, aunque no me cites porque cuando me di cuenta de esto pensé que era demasiado tonto para compartirlo así que no he comprobado otros valores de b:

$${\frac {\mathcal{P} \left( N,b \right) }{b}}$$

$$\frac{\mathcal{P} \left( 12345,10 \right)}{10} =54321$$

$$\frac{\mathcal{P} \left( 13454345345,10 \right)}{10} =54354345431$$

$$\frac{\mathcal{P} \left( 842622684442,10 \right)}{10} =244486226248$$

Lo siento si ha sido exagerado, pero todavía estoy trabajando en la demostración formal de un montón de cosas con enteros p-ádicos y he tenido algunas experiencias bastante traumáticas con la inducción.

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