Conjetura de CollatzLa conjetura de Collatz, conocida también como conjetura 3n+1 o conjetura de Ulam (entre otros nombres), fue enunciada por el matemático Lothar Collatz en 1937, y aún no ha sido resuelta. EnunciadoSea la siguiente operación, aplicable a cualquier número entero positivo:
Formalmente, esto equivale a una función : Ahora, se forma una sucesión mediante la aplicación de esta operación repetidamente, comenzando por cualquier entero positivo, y tomando el resultado de cada paso como la entrada del siguiente. En notación: (esto es: es el valor de aplicado a recursivamente veces; ). La conjetura dice que siempre alcanzaremos el 1 independientemente del número con el que comencemos. EjemplosDado un número cualquiera, podemos considerar su órbita, es decir, las imágenes sucesivas al iterar la función. Por ejemplo, si n=13: Si observamos este ejemplo, la órbita de 13 es periódica, es decir, se repite indefinidamente a partir de un momento dado, que corresponde con el ciclo 4, 2, 1:
Estado actual del problemaAunque no se ha demostrado la veracidad ni falsedad del resultado, existen ciertas evidencias en ambos sentidos.[cita requerida] Si existe algún contraejemplo a la conjetura (es decir, un número cuya secuencia no alcance nunca el 1), debe satisfacer alguna de estas condiciones:
Evidencia computacionalAunque formalmente no demuestra nada, existen diversos grupos de computación que se dedican a calcular las secuencias de números cada vez más grandes. En mayo de 2020 se comprobó la conjetura para todas las secuencias de números menores que .[1] Resultados parcialesSuma de potencias de 4Los números que son suma de potencias de 4, como 5 = 1 + 4, 21 = 1 + 4 + 16, 85 = 1 + 4 + 16 + 64, 341 = 1 + 4 + 16 + 64 + 256, generan el 1 en forma casi directa, como en el ejemplo: 21 · 3 + 1 = 64, que es una potencia de 2 y genera el 1 al dividir 6 veces entre 2. La prueba es muy simple: es la suma de una progresión geométrica, e igual a . Al aplicar el algoritmo, obtenemos una potencia de 4, que, luego de sucesivas divisiones entre 2 nos da 1. PropiedadesAlgunas propiedades de las trayectorias podrían ayudar a demostrar la conjetura. Las más importantes son las siguientes: 1) Las trayectorias de un número impar q y de 4q+1 se juntan. La demostración es muy simple también. q -> 3q+1 4q+1 -> 12q + 4 -> 3q + 1 luego de dividir 12 q + 4 entre 2 dos veces. 2) Las trayectorias de un impar q y 2q+1 se unen en determinadas condiciones. Algunos ejemplos son 7 y 15, o 11 y 23. Si representamos sólo los impares, se ve este fenómeno más claramente. 7,11, 17, 13, 5, 1. 15,23, 35, 53, 5, 1. Como se puede apreciar, 7 y 15 se juntan en el 5. Nótese que 3 y 7 no se conectan de esa manera. 3, 5, 1 Un segundo ejemplo es el 11 y el 23. 11, 17, 13, 5, 1. 23, 35, 53, 5, 1. 11 no se conecta con el 5 de esta manera. 5, 1 Un tercer ejemplo es 27 y 55. Aquí vemos los primeros números y se juntan a nivel del 47 27, 41, 31, 47, 71, 107,... 55, 83, 125, 47, 71, 107, ... Esta propiedad funciona para la gran mayoría de los números. Números que terminan en 3Al agregar un 3 al final a estos números (a partir del 1, el 13, a partir del 5, el 53, a partir del 21, el 213, a partir del 85, el 853, etc), se obtiene 5, a partir del cual se obtiene 1. 213 = 210 + 3 213 · 3 + 1 = 639 + 1 = 640 = 5 · 128 128 es una potencia de 2, por lo que, dividiendo 7 veces entre 2, se llega a 1 Se puede generalizar este resultado de la siguiente manera: Si es un impar, y es otro impar, llamémosle , al aplicar el algoritmo de Collatz a , el siguiente impar será . Ejemplos: 3 -> 10 -> 5. El siguiente impar en la sucesión del 3 es el 5. Entonces, el siguiente impar en la sucesión del 33 será el 25 = . 7-> 22 -> 11. El siguiente impar en la sucesión del 7 es el 11. Entonces, el siguiente impar en la sucesión del 73 será el 55 = . Potencias de 4 más unoLos números que son de la forma generan y estos son menores que el número de partida para todo n natural. 3 mod 6Los números que son de la forma 3 mod 6 pueden considerarse como generadores de números mayores. Por ejemplo, el 31 puede generarse partiendo del 27. De la misma forma, el 111 genera el 334 que pertenece a la sucesión de números que empieza en el 27. PatronesPatrón binarioSe ha propuesto el estudio de patrones en sistema binario para el estudio de las propiedades de los números expresados como polinomios de potencias de 2, lo que simplifica el estudio de las propiedades de los mismos. Luego pueden ser demostrados los teoremas correspondientes. Por ejemplo, los números como 5, 21, 85, etc., tienen una expresión del tipo 10101...01 en sistema binario. Esos números son, entonces, los coeficientes de un polinomio en potencias pares de 2.
Los números del tipo 111...11 (n unos) que son iguales a , generan en un primer momento los de este tipo: 1011...111, (n+1 cifras). En un segundo momento se obtiene 10001...1 (n+2 cifras), luego 11010111...1, etc. VariantesExisten algunas variantes como, por ejemplo, la conjetura 2n+2, la cual se enuncia exactamente igual cambiando la función de impares a pares, es decir, si el número es impar, se multiplica por 2 y se suma 2. CódigoUn posible código en python a esta conjetura para demostrarla es la siguiente: # Definir una función que aplica la operación de la conjetura
def collatz(n):
if n % 2 == 0: # Si el número es par, se divide entre 2
return n // 2
else: # Si el número es impar, se multiplica por 3 y se suma 1
return 3 * n + 1
# Pedir al usuario que ingrese un número entero positivo
n = int(input("Ingrese un número entero positivo: "))
# Mientras el número no sea 1, aplicar la función y mostrar el resultado
while n != 1:
n = collatz(n)
print(n)
Como otra opcion, en Rust puede demostrarse con este código: use std::io;//esto es necesario para leer la entrada de la terminal
fn collazt(mut n: u32) -> (usize, Vec<u32>) {
let mut iteraciones: Vec<u32> = Vec::new();//esta variable almacena las iteraciones de la funcion
println!("Collazt. Parametro inicial: {n}");
while n > 1 {
n = if n % 2 == 0 { n / 2 } else { n * 3 + 1 };//aqui se aplica la formula
iteraciones.push(n);//esta funcion introduce el valor de n en las iteraciones
}
return (iteraciones.len(), iteraciones);//regresa la cantidad de pasos y las iteraciones
}
fn main() {
loop {
println!("Ingrese un numero entero positivo:");
let mut input_line = String::new();//esta variable guardara la entrada
io::stdin().read_line(&mut input_line).expect("Error al leer entrada");//esto lee la linea
if let Ok(x) = input_line.trim().parse::<u32>(){//convierte a numero positivo entero
let coll = collazt(x);//ejecuta la funcion y guarda los valores que regresa
println!("numero de pasos: {}. Secuencia: {:?}", coll.0, coll.1);//muestra los valores
}
else {println!("La entrada no era un numero entero positivo")}//si la entrada no es correcta, se mostrara este mensaje en lugar de lo anterior
println!()
}
}
Referencias
Enlaces externos
|
Portal di Ensiklopedia Dunia