Underc0de

Programación General => Java => Mensaje iniciado por: hackmin en Febrero 24, 2015, 12:35:14 PM

Título: [Java] Secuencia más larga Collatz
Publicado por: hackmin en Febrero 24, 2015, 12:35:14 PM
La siguiente secuencia iterativa se define para el conjunto de números enteros positivos:

n → n / 2 ( n es par) n → 3 n + 1 ( n es impar)

Usando la regla anterior y comenzando con 13, generamos la siguiente secuencia:

13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1
Se puede observar que esta secuencia (a partir de 13 y terminando en 1) contiene 10 términos. Aunque no se ha probado todavía (Collatz Problema), se cree que todos los números que empiezan terminan en 1.

¿Qué número inicial, menos de un millón, produce la cadena más larga?

Ejercicio: Básico

Código (java) [Seleccionar]
public static void main(String[] args) {

Scanner cin = new Scanner(System.in);
long finish = 9999;
long GetPrimo = cin.nextLong();
long GetNumero = 0;
long DividirPar = 0;
long MultiplicarImpar = 0;
long Contador = 1;
long Comparar = 0;
    for(long i = 1; i < GetPrimo;i++){
    DividirPar = i;
MultiplicarImpar = i;
    for(long x = 1; x < finish;x++){
   
    if(DividirPar % 2 == 0){
    DividirPar =  DividirPar / 2;
    MultiplicarImpar = DividirPar;
    Contador = Contador + 1;
    continue;
    }
    if(DividirPar == 1 && x > 1){
     
      if(Contador > Comparar){
      GetNumero = i;
      Comparar = Contador;
     
     
      }
      Contador = 1;
  x = 99999;
  continue;
    }
   
    if(MultiplicarImpar % 2 != 0){
   
   
    MultiplicarImpar = (MultiplicarImpar * 3) + 1;
    DividirPar = MultiplicarImpar;
    Contador = Contador + 1;
    continue;
    }
   
   
   
   
   
   
    }
   
     
    }
    System.out.println("El número: "+GetNumero+" Genera un total de: "+Comparar);
    }
    }


Salida del programa, haciendo menor que 1.000.000:

El número: 837799 Genera un total de: 525