martes, 10 de abril de 2018

Cancelaciones anómalas (1/2)


Cancelaciones con dos cifras

En este blog partimos a menudo de publicaciones en Twitter que nos llamen la atención.  El día 29/3/18, Fermat’s Library publicó las cancelaciones incorrectas en cuatro fracciones, pero que sus resultados sí son válidos. Ya conocíamos esta curiosidad, pero ante la invitación del texto del tweet, procedemos a pequeños desarrollos sobre el tema.


Siguiendo una metodología frecuente en este blog, comenzaremos por reproducir esta lista mediante VisualBasic para Excel o Calc, para después seguir con reflexiones teóricas y extensión a más cifras.

Función CANCELA

Comenzamos con la simple reproducción de estas cuatro fracciones mediante una búsqueda ordenada, restringiendo el estudio a números de dos cifras. En este caso, es claro que la solución es única para cada denominador, pero en nuestro planteamiento no lo tendremos en cuenta.

Nos basamos en las funciones CIFRA, NUMCIFRA y TROZOCIFRA ya diseñadas en este blog, y cuyo código se reproduce en el Apéndice.

CIFRA: extrae una cifra determinada de un número natural
NUMCIFRA: Cuenta las cifras de un número natural
TROZOCIFRA: Extrae del número unas cifras consecutivas determinadas.

Las condiciones de falsa cancelación son, por una parte, que la primera cifra de uno de los números sea idéntica a la segunda del otro, y que las cifras restantes representen fracciones equivalentes, lo que representaremos mediante la igualdad de productos cruzados. Quedará así, en forma de función:

Public Function cancela$(n) ‘Tiene forma de string para albergar varios números.
Dim i, m, p, q, x, y
Dim s$

m = numcifras(n) ‘Cuenta las cifras, y en esta fase sólo serán dos.
s$ = "" ‘La función comienza con una cadena vacía, por si no hay soluciones.
For i = 10 To n – 1 ‘Compara el número con todos sus anteriores.
p = numcifras(i)
If p = 2 And m = 2 Then ‘Restringe a números de dos cifras
x = cifra(i, 1)
y = cifra(n, 2)
If x = y And n * cifra(i, 2) = i * cifra(n, 1) Then s$ = s$ + Str(n) + ", " + Str$(i)
‘Unas cifras han de ser iguales, y las otras dar productos cruzados equivalentes.
End If
Next i
cancela = s ‘El resultado es el conjunto de soluciones para ese número
End Function

Con esta función y una búsqueda ordenada hemos obtenido las cuatro soluciones de dos cifras:


Estudio algebraico para dos cifras

Tienes un desarrollo similar en

https://en.wikipedia.org/wiki/Anomalous_cancellation y la presentación del problema en http://mathworld.wolfram.com/AnomalousCancellation.html

Aquí nos limitaremos a la base de numeración 10.

Si dos cifras han de ser iguales para poderse cancelar, los números se podrán representar en base 10 como ab(10 y ca(10, o lo que es igual, p=10a+b y q=10c+a. Si las cancelaciones han de funcionar como verdaderas, serán equivalentes los productos cruzados: p*c=q*b, o bien

(10a+b)*c=(10c+a)*b
10ac+bc=10bc+ab

 De esta igualdad básica podemos extraer otras. En Wikipedia se llega, para cualquier base p, a esta:



Particularizada a base 10 quedaría como

10c(a-b)=b(a-c)

También podemos despejar a, la cifra que se cancela:



Ya que este blog va de hojas de cálculo, nos podemos ahorrar más razonamientos y formar una tabla de doble entrada para c y b, destacando después los resultados enteros de ese cociente. Hemos situado la variable c en columnas, la b en filas y el posible valor de a en el interior de la tabla.




Salvo los casos triviales en los que b=c, obtenemos (destacados en rojo) las cuatro posibilidades válidas:

a=6, b=4, c=1
a=6, b=5, c=2
a=9, b=5, c=1
a=9, b=8, c=4

Coinciden con las cuatro soluciones obtenidas



Podemos prescindir de la hoja de cálculo con otro tipo de razonamiento, observando los valores que hacen enteras las fracciones.

10c(a-b)=b(a-c)

10 divide a b(a-c), lo que obliga a que b sea par y a-c=5, o bien, que b=5 y a-c par (son cifras, por lo que todos son iguales o menores que 9)

(1) Si b=5 queda a=45c/(10c-5)=9c/(2c-1)

Para que sea entero, 2c-1 ha de ser 1 o divisor de 9.

Si es 1, queda a=9 y la solución {95,19}. Si 2c-1 fuera divisor de 9, podría ser c igual a 2 o a 5.

Si c=2, a=(9*2)/3=6, lo que nos da la solución {65, 26}

Si c=5, a=(9*5)/(9)=5, lo que llevaría a una trivialidad: 55/55

(2) Si b es par y a-c=5 nos queda

10c(c+5-b)=5b
b=10c(c+5)/(10c+5)

Los valores que hacen entera esta fracción son:

c=1, b=60/15=4 y a=9*1*4/(10*1-4)=36/6=6, lo que nos lleva a la solución {64,16}

c=4, b=10*4*9/(10*4+5)=360/45=8, a=9*4*8/(10*4-8)=9, que conduce a {98, 49}

Ningún otro valor de c hace entera la fracción, luego se han agotado las posibilidades.

Hasta aquí el caso en el que numerador y denominador son ambos de dos cifras en base 10. Existen otros casos de más cifras, de los que algunos se presentan en el enlace a la página de Mathworld de más arriba, de la que ofrecemos un recorte


Dejamos el estudio de esos casos y otros nuestros inéditos para la próxima entrada.

Apéndice

Public Function cifra(m, n)

'Extrae la cifra n del número m si es natural.En caso contrario devuelve -1. También devuelve -1 si excede del número de cifras

Dim a, b

If m>0 and m=Int(m) Then
If n > numcifras(m) Then
  cifra = -1
  Else
  a = 10 ^ (n - 1)
  b = Int(m / a) - 10 * Int(m / a / 10)
  cifra = b
  End If
Else
cifra = -1
End If
End Function


Public Function numcifras(n)
Dim nn, a
'Calcula el número de cifras enteras de un número natural. Si no lo es, devuelve un cero

If n>0 and n=Int(n) Then
a = 1: nn = 0
While a <= n
a = a * 10: nn = nn + 1
Wend
numcifras = nn
Else
numcifras = 0
End If
End Function

Public Function trozocifras(m, n, p)

'Extrae un trozo desde la cifra n hasta la p

Dim a, b, c, d

If m>0 and m=Int(m) Then
c = numcifras(m)
If n > c Or p > c Then
  trozocifras = -1
  Else
  a = 10 ^ p
  d = 10 ^ (n - 1)
  b = m - Int(m / a) * a
  b = Int(b / d)
  trozocifras = b
  End If
Else
trozocifras = -1
End If
End Function

No hay comentarios: