Un Número de Ulam es un miembro de una secuencia entera, la cual fue concebida por el matemático polaco Stanislaw Ulam y publicada en SIAM Review en 1964. La secuencia estándar de Ulam comienza con U1=1 y U2=2, siendo los primeros dos números de Ulam. Entonces, para n > 2, Un queda definido como el entero más pequeño que es la suma de dos miembros anteriores diferentes entre sí en exactamente una forma.
Ulam conjeturaba que esta secuencia tiene densidad 0. Sin embargo, cálculos hasta 4*107 (Jud McCranie) indican que la densidad alcanza cerca de 0.074.
Según la definición, 3=1+2 es un número de Ulam; y 4=1+3 es un número de Ulam (La suma 4=2+2 no cuenta porque los términos previos deben ser distintos). El entero 5 no es un número de Ulam porque 5=1+4=2+3.
Los primeros términos de la secuencia son: 1, 2, 3, 4, 6, 8, 11, 13, 16, 18, 26, 28, 36, 38, 47, 48, 53, 57, 62, 69, 72, 77, 82, 87, 97, 99.
Los primeros números de Ulam que son números primos son:2, 3, 11, 13, 47, 53, 97, 131, 197, 241, 409, 431, 607, 673, 739, 751, 983, 986, 991, 1103, 1433, 1489.
La idea puede ser generaliza seleccionando diferentes valores de inicio y exigiendo que los términos sean una suma de valores previos en una cantidad dada de formas.
Aquí hay un código de ejemplo (no-optimizado) Python que genera todos los números de Ulam menores que 1000.
ulam_i = [1,2,3]
ulam_j = [1,2,3]
for cand in range(4,1000):
res = []
for i in ulam_i:
for j in ulam_j:
if i == j or j > i: pass
else:
res.append(i+j)
if res.count(cand) == 1:
ulam_i.append(cand)
ulam_j.append(cand)
print ulam_i