lunes, 14 de octubre de 2019

La función sigma y sus traslados


En esta entrada investigaremos los números enteros positivos tales que al sumarles k unidades, el valor de su función sigma (suma de divisores) no cambia, es decir:



Existen muchos ejemplos según los valores de k, y recorreremos algunos para destacar sus propiedades.

Será de utilidad repasar la fórmula de esta función según la descomposición factorial del número. Es la siguiente:




donde pi son los factores primos de N y ei sus exponentes. Cada factor también se puede interpretar como la suma de potencias del número primo correspondiente desde p0 hasta pe:


Una implementación sencilla (para Excel o Calc) de esta función es la siguiente, escrita en código VBasic, aunque en este blog se usa otra basada en la descomposición factorial:

Public Function sigma(n)
Dim i, s
i = 1
s = n ‘La sigma se inicia con el valor de n
For i = 1 To n / 2 ‘El máximo divisor propio posible es n/2
If n / i = n \ i Then s = s + i ‘Si es divisor, se suma
Next i
sigma = s
End Function

Caso K=1

No es difícil construir un bucle de búsqueda de números consecutivos con la misma sigma. Los primeros son estos:



Están publicados en http://oeis.org/A002961

A002961                            Numbers n such that n and n+1 have same sum of divisors.
14, 206, 957, 1334, 1364, 1634, 2685, 2974, 4364, 14841, 18873, 19358, 20145, 24957, 33998, 36566, 42818, 56564, 64665, 74918, 79826, 79833, 84134, 92685, 109214, 111506, 116937, 122073, 138237, 147454, 161001, 162602, 166934

En esta página se comenta que para valores de n < 2*10^10 el valor de sigma(n)/n está entre 1,5 y 2,25. No se sabe si esta sucesión es infinita.
Parece ser que 14 y 15 son los únicos semiprimos de la sucesión, y la sigma coincidente es 24 porque s(14)= s(2*7)=(1+2)(1+7)=3*8=24 y s(15)=s(3*5)=(1+3)(1+5)=4*6=24

Ni p ni p+1 pueden ser primos en esta sucesión. Si p fuera primo, sería s(p)=1+p, con lo que no podría alcanzar el valor de s(p+1). Si el que es primo es p+1, tendríamos s(p+1)=p+2, con lo que los divisores propios de p deberían sumar 2, lo que no ocurre nunca.

206 y 207 son los siguientes (no semiprimos en este caso), porque
s(206)= s(2*103)=(1+2)(1+103)=3*104=312 y
s(207)= s(3^2*23)=(1+3+9)(1+23)=13*24=312

El código PARI que figura en la publicación citada no es el más compacto. Se puede usar preferiblemente este otro:

for(p=1,20000,  if(sigma(p)==sigma(p+1), print1(p,", ")))

Hasta donde hemos explorado, la sigma común es múltiplo de 6.

Caso k=2

Aplicando la función sigma a dos números que se diferencien en dos unidades, resultan con resultados iguales los siguientes (primeras soluciones):

Como en el caso anterior, era de esperar que estuviesen ya publicados:

A007373                            Numbers n such that sigma(n+2) = sigma(n).
33, 54, 284, 366, 834, 848, 918, 1240, 1504, 2910, 2913, 3304, 4148, 4187, 6110, 6902, 7169, 7912, 9359, 10250, 10540, 12565, 15085, 17272, 17814, 19004, 19688, 21410, 21461, 24881, 25019, 26609, 28124, 30592, 30788, 31484, 38210, 38982, 39786, 40310,

En esta sucesión, al igual que en la anterior, no hay primos, y parece que tampoco cuadrados. Las sigmas comunes que aparecen, también son múltiplos de 6 en este caso.

Sí figuran semiprimos en esta sucesión (las dos últimas columnas son los factores primos de las dos primeras. Al ser semiprimos, los exponentes de cada corchete son iguales a 1):


Por ejemplo, s(4187)=(1+53)(1+79)=4320 y s(4189)=(1+59)(1+71)=4320
Abreviamos. Para el siguiente caso tenemos:


CASO K=3




También están publicados.

A015861                            Numbers n such that sigma(n) = sigma(n + 3).                     
382, 8922, 11935, 31815, 32442, 61982, 123795, 145915, 186615, 271215, 442362, 554715, 560382, 580635, 964535, 1191575, 1243375, 1369302, 1539942, 1642795, 2616702, 3141215, 3299062, 3556035, 3716895, 4201015, 5148294 (list; graph; refs; listen; history; text; internal format)

Por último el caso de diferencia 4:


No añadimos detalles.
A015863                            Numbers n such that sigma(n) = sigma(n + 4).                     
51, 66, 115, 220, 319, 1003, 2585, 4024, 4183, 4195, 5720, 5826, 5959, 8004, 8374, 11659, 12367, 12561, 13581, 14338, 15365, 16116, 17840, 18718, 20541, 25130, 29393, 30170, 32665, 36516, 39913, 40660, 42423, 42922, 47841, 49762 (list; graph; refs; listen; history; text; internal format)
Los casos k=5 y k=6 estàn también publicados. Dejamos esta primera cuestión.

Para investigar otros casos (por ejemplo, el 22) puedes construir un bucle (lo desarrollamos en VBasic) similar al siguiente:

For n=1 to 10000 ‘Hemos escrito 10000 como ejemplo
K=22 ‘El 22 también es un ejemplo
If sigma(n)=sigma(n+k) then msgbox(n) ‘Si coinciden las sigmas, lo presentamos
Next n

Ordenando la búsqueda nos ha resultado


Así puedes proceder en otros casos.

Diferencias que no se dan

Podemos investigar si desde 1 hasta m existen números que no cumplan la propiedad para un valor de k. Podría ser esta, que devuelve las diferencias que no se dan:

Public Function norepitesigma(m, k)
Dim i, s
Dim norepe As Boolean

i = 1: norepe = True: s = 0
While i <= m And norepe
If fsigma(i, 1) = fsigma(i + k, 1) Then norepe = False: s = i
i = i + 1
Wend
norepitesigma = s
End Function

Para valores menores que 10000 estas son las primeras diferencias que no se dan (hay más):



Probamos con 100000 y las diferencias de la tabla anterior inferiores a 5000 desaparecen. Esto nos hace sospechar que, dada una diferencia entre números con sigmas iguales, se alcanza siempre un valor para el que es válida esa diferencia. Para verlo mejor podríamos invertir el punto de vista: dada una diferencia, averiguar en qué número se da. Este problema no tiene cota de búsqueda, por lo que la efectuaremos con cotas fijadas por nosotros. Podemos usar:

Public Function tienesigmacomun(n, c)
'Para una diferencia n, creamos un bucle con cota c hasta que aparezca esa diferencia
Dim k, s
Dim notiene

k = 1: notiene = True: s = 0
While notiene And k < c ‘Avanzamos si no aparece o llegamos a la cota
If fsigma(k, 1) = fsigma(n + k, 1) Then notiene = False: s = k
k = k + 1
Wend
tienesigmacomun = s
End Function

Con esta función podemos desechar las diferencias de la tabla anterior. Todas ellas aparecen con una cota de 100000:



Esto nos hace sospechar que todas las diferencias que planteemos terminarán por aparecer para algún valor.

Lo puedes investigar en PARI:

tiene(n)=local(c=100000,nr=1,k=1,s=0);while(nr==1&&k<c,if(sigma(k)==sigma(k+n),nr=0;s=k);k+=1);s
for(i=1,50000,if(tiene(i)==0,print(i))


Este código recorre desde 1 hasta 50000 para encontrar números que no puedan ser diferencias de sigmas con cota 100000. Descubre dos casos en los que no aparecen con esa cota 100000, que son 20160 y 22680, pero aparecen en los números 100776 y 113373 respectivamente. Esto nos hace esperar que todos los números, buscando lo suficiente, podrán ser diferencias de otros números con sigmas equivalentes.

Cambiando los parámetros 1000000 y 5000 puedes intentar descubrir si alguna diferencia no aparece nunca para una cota de 1000000 o mayor. Con esta cuestión abierta terminamos el tema.

No hay comentarios: