lunes, 21 de enero de 2019

Suma por diferencia con añadido de una unidad



El día 29/10/18 publiqué en Twitter (@connumeros) la siguiente propiedad del número de fecha 291018:

291018 presenta dos productos muy parecidos basados en el número 540:
291018=(540-33)(540+34)
291018=(540-7)(540+6)

Es algo parecido a la diferencia de cuadrados (suma por diferencia) con el añadido de una unidad al sumando o al sustraendo. Pueden darse los dos casos, que representaremos por

N=(m+p)(m-p+1) o bien N=(m+p)(m-p-1)

Al primer caso le llamaremos C(-1), porque el sustraendo es una unidad menor que p, y al segundo C(+1).

Es fácil ver que N ha de ser par, pues si m y p son ambos pares o impares, su suma m+p será par, y si son de distinta paridad, lo es el otro factor. Al multiplicar siempre habrá un factor par, lo que convierte también en par el producto.

A la inversa, todo número par mayor que 2 (para evitar el valor 0) presenta dos soluciones triviales:

Todo número par n>2 cumple esta descomposición haciendo m=n/2+1 y p=n/2-1, pues entonces n=(n/2+1+n/2-1)(n/2+1-(n/2-1)-1)=n*1

También cumple esta otra: m=n/2, p=n/2, con n=(n/2+n/2)(n/2-n/2+1)=n*1

A partir de ahora eliminaremos estos dos casos, y sólo consideraremos el caso m-p>2.

Con esa restricción, el primer número que admite esta descomposición es el 10, si hacemos m=4 y p=1

10=(4+1)(4-2)=5*2

Será pues un caso del tipo C(+1).

Para saber si un número se puede descomponer de esta forma podemos usar la siguiente función:

Public Function sumapordif$(n) ‘Es de tipo string para contener soluciones
Dim m, p, a, k
Dim c$

c$ = "": k = 0 ‘c$ contiene soluciones y k las cuenta
For m = 2 To n - 1
For p = 1 To m – 3 ‘Respetamos una diferencia mayor que 2
a = 0
If n = (m + p) * (m - p - 1) Then a = 1 ‘Probamos las dos fórmulas
If n = (m + p) * (m - p + 1) Then a = -1
If a <> 0 Then k = k + 1: c$ = c$ + Str$(m) + Str$(p) + "#" + Str$(a)
‘Si alguna de las dos se verifica, se incorpora la solución y se incrementa el contador
Next p
Next m
If k > 0 Then c$ = Str$(k) + c$ ‘Se incorpora el contador a la solución
sumapordif = c$
End Function

Con ella podemos descubrir los primeros números pares que admiten solución:

10          1 4 1# 1
14          1 5 2# 1
18          2 5 1# 1 6 3# 1
20          1 4 1#-1
22          1 7 4# 1
24          1 6 2# 1
26          1 8 5# 1
28          2 5 2#-1 6 1# 1
30          3 5 1#-1 7 3# 1 9 6# 1
34          1 10 7# 1
36          3 6 3#-1 7 2# 1 8 4# 1
38          1 11 8# 1
40          2 6 2#-1 7 1# 1
42          3 6 1#-1 9 5# 1 12 9# 1
44          2 7 4#-1 8 3# 1
46          1 13 10# 1
48          1 10 6# 1
50          3 7 3#-1 8 2# 1 14 11# 1
52          2 8 5#-1 9 4# 1
54          4 7 2#-1 8 1# 1 11 7# 1 15 12# 1
56          1 7 1#-1
58          1 16 13# 1
60          5 8 4#-1 9 3# 1 9 6#-1 10 5# 1 12 8# 1

Para cada número figura en primer lugar el número de soluciones. Así, 60 presenta 5 soluciones. Después figuran los valores de m y p seguidos de # y de +1 o -1 según el tipo de solución.

Vemos que la solución para el 54 es 4 7 2#-1 8 1# 1 11 7# 1 15 12# 1. Eso significa que posee cuatro soluciones, una del tipo C(-1) y las otras del otro tipo.

En efecto, se cumple:


54=(7+2)(7-1)=(8+1)(8-2)=(11+7)(11-8)=(15+12)(15-13)


Soluciones dobles con el mismo valor de m

Un problema más difícil es el de determinar si un número, como el 291018 admite dos (o más) soluciones con el mismo valor de m. El algoritmo puede resultar algo complejo, por lo que hay que estudiarlo con atención. Para los valores de m usamos el rango desde 2 hasta la mitad del número, ya que m+p ha de ser divisor propio de n (si desechamos los casos triviales). Después, para cada valor de m contamos los casos favorables y, si son mayores que 1, los reservamos en la variable c$ para construir la función. Este es el listado:

Public Function sumapordifdup$(n)
Dim p, h, v, b, m, n2
Dim c$


If n Mod 2 <> 0 Then sumapordifdup = "": Exit Function ‘Desechamos los impares
n2 = n / 2 ‘n/2 es el tope para m
v = 0 ‘Contador de soluciones si procede
m = 2 ‘Inicio de m
c$ = "" ‘Contenedor de la solución
While m < n2 And v = 0 ‘Avanza hasta la mitad de n si no hay solución
p = 1: h = 0: c$ = "" ‘Se inician los valores para p
While p < m - 1 And v = 0
b = m + p ‘Se construye la suma m+p para ver si es divisor
If n Mod b = 0 Then ‘Si es divisor, se prueban las dos posibilidades
If n = b * (m - p - 1) Or n = b * (m - p + 1) Then c$ = c$ + Str$(m) + Str$(p): h = h + 1
‘La línea anterior es fundamental, porque cuenta soluciones para un mismo valor de m
End If
p = p + 1
Wend
If h > 1 Then v = h ‘Si hay más de una solución, se para el proceso
m = m + 1
Wend
If v>0 then sumapordifdup$ = c$ else sumapordifdup$ = “”
End Function

Aplicada esta función a nuestro valor 291018 se obtiene:




Coincide con el planteamiento inicial de esta entrada.

Esta función no nos informa sobre si el tipo es C+1 o C-1, pero es que se ha querido simplificar. Después de obtenida la solución se puede efectuar una comprobación manual.

Con esta función podemos obtener los primeros números que satisfacen una relación doble como la solicitada:

N            Valores de m (duplicado) y p

36          7 2 7 5
60          9 3 9 6
70          9 1 9 5
90          11 4 11 7
126        12 2 12 6
168        15 6 15 9
180        14 1 14 6
198        15 3 15 7
216        17 7 17 10
270        19 8 19 11
286        18 4 18 8
300        18 2 18 7
330        21 9 21 12
378        20 1 20 7
390        21 5 21 9
396        23 10 23 13
450        22 3 22 8
468        25 11 25 14

Por ejemplo, 330=(21+9)(21-10)=(21+12)(21-11) Posee, pues, las dos soluciones pedidas para el valor 21, que era lo exigido.

Vemos que existen muchos ejemplos de una propiedad que parecía más restrictiva, pero este tipo de hechos no se descubren hasta no emprender el estudio.

Si descomponemos estos números en factores primos, observaremos que poseen más de cuatro divisores, lo que propicia que se dé la casualidad que estamos comentando:





No hay comentarios: