lunes, 12 de febrero de 2018

Operandos simétricos (1)


En las redes sociales es posible encontrar la publicación de operaciones en las que el resultado de las mismas no cambia si cada operando se sustituye por su simétrico en base 10, es decir, con las cifras en orden inverso. Por ejemplo 12*42=504 y si invertimos, 21*24=504 también. Otro ejemplo sería 12*63=756 y 21*36=756. Podemos estudiar diversos aspectos sobre esta casualidad. Nos limitaremos al caso de dos cifras, que es el más interesante. Dejamos los demás casos a otro momento en el que aumente la motivación.

Operación producto

El caso en el que la operación sea un producto ha sido ya bien estudiado. Los posibles resultados están publicados. Los primeros son estos:

504, 756, 806, 1008, 1148, 1209, 1472, 1512, 2016, 2208, 2418, 2772, 2924, 3024, 4416, 4433, 5544, 6314, 8096, 8316, 8415, 8866, 10736, 11088,...(http://oeis.org/A228164)

Todos esos números proceden de dos productos simétricos. El primero, 504, ya lo hemos desarrollado. La siguiente tabla la hemos construido en hoja de cálculo para destacar los factores correspondientes a los términos de la sucesión anterior. Las dos primeras columnas representan los factores y la tercera el producto. Es fácil buscar en ella resultados iguales y pares simétricos:

12 42 504
12 63 756
12 84 1008
13 62 806
13 93 1209
14 82 1148
21 24 504
21 36 756
21 48 1008
23 64 1472
23 96 2208
24 63 1512
24 84 2016
26 31 806
26 93 2418
28 41 1148
31 39 1209
32 46 1472
32 69 2208
34 86 2924
36 42 1512
36 84 3024
39 62 2418
42 48 2016
43 68 2924
46 96 4416
48 63 3024
64 69 4416


Resultan 28 resultados. Más adelante justificaremos este número. Es evidente que en esta cuestión se excluyen los capicúas. Para construir una tabla similar necesitaremos una función para descubrir si un número es capicúa y otra para invertir las cifras de un número entero.

Disponemos de la función ESCAPICUA, que devuelve VERDADERO si lo es, y la función CIFRAINVER, que invierte las cifras de un número. El código de ambas lo tienes en el Anexo.

Una vez preparadas estas dos funciones, basta un bucle doble para detectar si un par de números cumple la propiedad citada. Para facilitar las búsquedas introducimos la función EQUISIM, que devuelve VERDADERO si al invertir las cifras en un producto el resultado no cambia. Puede ser la siguiente:

function equisim(m,n)
dim a,b,c

a=cifrainver(m) ‘Invertimos las cifras
b=cifrainver(n)
c=m*n ‘Calculamos el producto
if c=a*b then equisim=c else equisim=0 ‘Si coinciden se devuelve el producto y si no, un cero
end function

Con esta función y un doble bucle podemos encontrar las soluciones de la tabla de arriba

For i = p To q
for a=i to q

c=equisim(i,a)
If c>0 and not escapicua(i) and not escapicua(a) and a<>cifrainver(i) Then
Msgbox(i)
Msgbox(a)
Msgbox(c)
End if
Next a
Next i

Relación entre las cifras

Una pregunta natural es si las cifras de estas soluciones están relacionadas de alguna forma. Con un poco de Álgebra lo descubriremos en el caso de dos cifras. Sean los números  (10*a+b) y (10*m+n). Planteamos que su producto coincida con el que resulta de invertir cifras:

 (10*a+b)(10*m+n)=(10*b+a)(10*n+m)

Operamos con simplificación y queda

99am=99bn

am=bn

Luego la relación entre cifras es que el producto de las decenas coincida con el de las unidades. Compruébalo con los ejemplos de la tabla. Por ejemplo,  46 y 96 cumplen 4*9=6*6 y también que 46*96=64*69=4416

Esta es otra forma de ver el problema. Para buscar soluciones recorreremos los números que se puedan expresar de dos formas distintas como producto de dos factores de un dígito. Por ejemplo, 18=3*6=2*9, luego unas soluciones son {32, 69} {39, 62} {23, 96} y {26, 93}.

Sería buena idea recorrer todos los números enteros que se pueden descomponer en dos pares de factores de una cifra distintos. Es fácil ver que son:

4=1*4=2*2
6=1*6=2*3
8=1*8=2*4
9=1*9=3*3
12=2*6=3*4
16=2*8=4*4
18=2*9=3*6
24=3*8=4*6
36=4*9=6*6

De ellos hay cinco con todas las cifras distintas, que según un razonamiento anterior, darán lugar a cuatro soluciones cada uno, lo que suma 20 soluciones. Con dos cifras repetidas hay cuatro, que a dos soluciones cada uno, formarán 8 soluciones. Sumamos y obtenemos las 28 que forman la tabla de soluciones.

Si quieres asegurarte de que ya no hay más, puedes usar esta función, que te devuelve “NO” si no es un número válido, o bien el conjunto de factores menores que 10.

Su código puede ser este:

Function cuatrodigi$(n)
Dim a, i, j, k
Dim s$

s = ""   ‘Recibirá las soluciones o un “NO”
k = 0    ‘Contador de pares
For i = 1 To 8
For j = i To 9
If n = i * j Then ‘Vemos si es producto de dos dígitos
k = k + 1            ‘Si lo es, incrementamos el contador y recogemos soluciones en s$
s$ = s$ + Str$(i) + Str$(j)
End If
Next j
Next i
If k > 1 Then cuatrodigi$ = s$ Else cuatrodigi = "NO"  ‘Recogemos soluciones si son cuatro o más
End Function


Hemos usado esta función en una rutina de búsqueda y nos han resultado las nueve soluciones ya analizadas:



En la próxima entrada estudiaremos otras operaciones simétricas distintas del producto.

ANEXO

Public Function escapicua(n) As Boolean
Dim l, i, k
Dim c As Boolean
Dim auxi$

auxi = Right(auxi, Len(auxi) - 1)
c = True
i = 1
k = Int(l / 2)
While i <= k And c
  If Mid(auxi, i, 1) <> Mid(auxi, l - i + 1, 1) Then c = False
  i = i + 1
  Wend
End If
escapicua = c
End Function


Public Function cifrainver(n)
Dim l, i
Dim c
Dim auxi$, auxi2$, ci$
If n < 10 Then cifrainver = n: Exit Function
auxi = auxi = Right(auxi, Len(auxi) - 1)
auxi2$ = ""
l = Len(auxi)
For i = l To 1 Step -1
ci$ = Mid(auxi, i, 1)
auxi2 = auxi2 + ci$
Next i
c = Val(auxi2$)
cifrainver = c
End Function