Autor Tema: Programa para calcuar la conjetura de Collatz

0 Usuarios y 1 Visitante están viendo este tema.

09 Diciembre, 2024, 12:23 am
Leído 5500 veces

Remonak

  • $$\Large \color{#6a84c0}\pi$$
  • Mensajes: 2
  • País: es
  • Karma: +0/-0
Por si alguien no lo sabe, la conjetura de Collatz consiste de elegir un número y: si es impar, se multiplica por \( 3 \) y se le suma \( 1 \), es decir, \( (3x+1) \) y si es par, se divide entre 2, y eso se repite hasta que se obtenga \( 0 \), fácil, ¿verdad?, pues resulta que nadie lo ha resuelto porque cualquier comprobado hasta ahora (\( 2^68 \)) ha quedado en un bucle al llegar al numero \(  4 \).

Se que mucha gente ha hecho este tipo de programas en Python u otros sistemas de programación, yo he intentado hacer uno por mi mismo en Scratch, así es más fácil comprobar números y es más accesible a la gente, si hay alguna forma de mejorar el programa, dejadmelo saber :)

09 Diciembre, 2024, 10:03 am
Respuesta #1

Luis Fuentes

  • el_manco
  • Administrador
  • Mensajes: 58,871
  • País: es
  • Karma: +0/-0
Hola

Por si alguien no lo sabe, la conjetura de Collatz consiste de elegir un número y: si es impar, se multiplica por \( 3 \) y se le suma \( 1 \), es decir, \( (3x+1) \) y si es par, se divide entre 2, y eso se repite hasta que se obtenga \( 0 \), fácil, ¿verdad?, pues resulta que nadie lo ha resuelto porque cualquier comprobado hasta ahora (\( 2^68 \)) ha quedado en un bucle al llegar al numero \(  4 \).

Hasta que se obtenga cero no. Nunca se llega a cero de hecho. Lo que dice la conjetura es que siembre se llega al bucle \( 4,2,1,4,2,1,\ldots \).

Citar
Se que mucha gente ha hecho este tipo de programas en Python u otros sistemas de programación, yo he intentado hacer uno por mi mismo en Scratch, así es más fácil comprobar números y es más accesible a la gente, si hay alguna forma de mejorar el programa, dejadmelo saber :)

No se si podría sacar (opcionalmente) los resultados intermedios al ir aplicando la función de Collatz y detenerse automáticamente cuando llega a un bucle.

Saludos.

09 Diciembre, 2024, 11:31 am
Respuesta #2

Remonak

  • $$\Large \color{#6a84c0}\pi$$
  • Mensajes: 2
  • País: es
  • Karma: +0/-0
Lo que me referia con lo de llegar al cero era que usar un numero que no acabe en el bucle del 4,2,1 (Es decir, que intente o llegar a 0 o que no acabe en ese bucle), perdon si no especifique al referirme a eso :)

Ah, gracias por la idea, actualizare el programa, ¿hay algun otro desafio del cual pueda yo hacer otro programa?

Gracias por leer :D

09 Diciembre, 2024, 08:15 pm
Respuesta #3

Tachikomaia

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,239
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
No entiendo lo que dices, y Wikipedia parece decir algo distinto (que sí entiendo) a lo tuyo:
https://es.wikipedia.org/wiki/Conjetura_de_Collatz

Tu link no lo miré, soy paranoico.

El programa parece sencillo:
Código: [Seleccionar]
Código Action Script 1.0:
Numero = (ingresarlo);
function ProcesoDeCollatz () {
   if (Numero % 2 == 0) {
      Numero = Numero/2;
   } else {
      Numero = Numero*3+1;
   }
}
Código en un objeto:
on enterframe {
   _level0.ProcesoDeCollatz();
}

Si quieres que se detenga cuando Numero sea 0, se pone lo correspondiente, pero no vi que el señor en cuestión dijera que puede ser 0, y además parece imposible, ningun número positivo /2 da 0.

En cuanto a desafios:
https://foro.elhacker.net/programacion_general/iquestcomo_aprender_a_hacer_programas_que_resuelvan_dudas-t522202.0.html

Es un foro, no una página random, pero si quieres te pongo aquí el contenido.

También puede que te sirva el archivo de Word que te adjunto.

10 Diciembre, 2024, 04:10 am
Respuesta #4

ingmarov

  • Moderador Global
  • Mensajes: 5,428
  • País: hn
  • Karma: +0/-0
  • Sexo: Masculino
Hola Remonak

Por si alguien no lo sabe, la conjetura de Collatz consiste de elegir un número y: si es impar, se multiplica por \( 3 \) y se le suma \( 1 \), es decir, \( (3x+1) \) y si es par, se divide entre 2, y eso se repite hasta que se obtenga \( 0 \), fácil, ¿verdad?, pues resulta que nadie lo ha resuelto porque cualquier comprobado hasta ahora (\( 2^68 \)) ha quedado en un bucle al llegar al numero \(  4 \).

Se que mucha gente ha hecho este tipo de programas en Python u otros sistemas de programación, yo he intentado hacer uno por mi mismo en Scratch, así es más fácil comprobar números y es más accesible a la gente, si hay alguna forma de mejorar el programa, dejadmelo saber :)

Es pesado el archivo...

Comparto el código en python de programa que entrega la sucesión de un solo número n. El programa se detiene cuando n=1.

Código: [Seleccionar]
a=[]
def collatz(n):
    a.append(n)
    if n==1:
        return(a)
    if n%2==0:
        return(collatz(int(n/2)))
   
    else:
        return(collatz(3*n+1))


Saludos
No te confíes, revisa lo que escribo. Yo también me equivoco.
Odio el autocorrector de Android...