Respuesta corta: ¡ usa una computadora! ¡Son bastante malditos rápido!
Respuesta larga: he escrito un pequeño código C ++ que te ayudará a encontrar el enésimo número Ulam. Antes de llegar al código, esto es lo que realmente es un Número Ulam …
Un número de Ulam es básicamente cualquier término que aparece en la secuencia de Ulam. Así es como se define esta secuencia …
- ¿Cómo son útiles la estructura de datos y los algoritmos en el aprendizaje automático?
- Dados los pares 'n1' de corchetes "[]", los pares 'n2' de corchetes "{}" y los pares 'n3' de corchetes "()", ¿cómo podemos encontrar todas las combinaciones válidas posibles de todos estos pares de manera eficiente?
- ¿Qué algoritmos y estructuras de datos debo aprender para ZCO e INOI?
- Imagine una cerradura de bicicleta combinada con 4 anillos que contienen 10 letras. ¿Cómo se puede calcular qué letras en cada anillo producirán las palabras más válidas?
- ¿Cuál es el vínculo entre los algoritmos de optimización y las distribuciones de probabilidad?
La secuencia estándar de Ulam (la secuencia (1,2) -Ulam) comienza con [matemáticas] U_1 = 1 [/ matemáticas] y [matemáticas] U_2 = 2 [/ matemáticas]. Entonces, para [matemática] n> 2 [/ matemática], [matemática] U_n [/ matemática] se define como el entero más pequeño que es la suma de dos términos anteriores distintos exactamente de una manera y más grande que todos los términos anteriores.
Según esta definición formal, la secuencia estándar se vería así …
[matemáticas] 1, 2, 3, 4, 6, 8, 11, 13, 16, 18, 26, 28, 36 … [/ matemáticas] (y así sucesivamente)
Déjame explicarte el patrón …
- 3 es un número de Ulam (1 + 2)
- 4 es un número de Ulam (1 + 3). Aquí 2 + 2 no es una segunda representación de 4, porque los términos anteriores deben ser DISTINCT.
- El número 5 NO es un número de Ulam, porque 5 = 1 + 4 y también 5 = 2 + 3. Lo que significa que hay más de una forma de representar 5 usando los términos anteriores. Entonces, 5 no aparece en nuestra secuencia.
- 6 es un número de Ulam (2 + 4)
- 7 NO es un número de Ulam, porque 7 = 1 + 6 y también 7 = 3 + 4. Lo que significa que hay más de una forma de representar 7 usando los términos anteriores. Entonces, 7 no aparece en nuestra secuencia.
- Usando la misma lógica, puede extender esta secuencia.
Nota importante: La secuencia estándar de Ulam comienza con 1 y 2. Pero tenga en cuenta que he escrito un código más generalizado. Lo que quiero decir es que puede ingresar cualquier valor que desee para el primer y segundo término en lugar de 1 y 2.
Ahora llegando al código C ++ :
#include
usando el espacio de nombres estándar;
int main ()
{
int n;
cout << "Ingrese el valor de N:";
cin >> n;
int a [n];
cout << "Ingrese el primer término:";
cin >> a [0];
cout << "Ingrese el segundo término:";
cin >> a [1];
int s = a [0] + a [1];
if (a [0]! = a [1])
{
para (int i = 2; i <n; i ++)
{
int b [i], bandera = 0;
para (int j = 0; j <i; j ++)
{
b [j] = a [j];
}
para (int k = 0; k <i-1; k ++)
{
para (int j = k + 1; j <i; j ++)
{
if (b [k] + b [j] == s && b [k]! = b [j])
{
bandera ++;
}
}
}
si (bandera == 1)
{
a [i] = s;
s ++;
}
más
{
yo-;
s ++;
}
}
cout << "\ nAquí está el número de Ulam que deseas:" << a [n-1] << "\ n \ n";
cout << "La secuencia es así …" << "\ n \ n";
para (int i = 0; i <n; i ++)
{
cout << a [i] << "";
}
cout << endl;
}
más
{
cout << "¡El primer y segundo términos ingresados tienen que ser distintos! \ n ¡Abortados!" << endl;
}
devuelve 0;
}
Aquí hay algunas fotos que tomé de la secuencia estándar de Ulam (1,2)
Dejemos atrás la secuencia “Estándar” (1,2) y veamos las secuencias generalizadas más divertidas (x, y) …
Ahora, si desea llevar este código al límite y probar algunos casos de prueba grandes, le recomendaría que modifique el código que escribí anteriormente simplemente eliminando las líneas 45, 46, 47, 48 y 49 .
Hacerlo ya no mostrará la secuencia completa de Ulam. El programa ahora simplemente se detendrá una vez que encuentre el enésimo número Ulam.