[Java] Secuencia más larga Collatz

Iniciado por hackmin, Febrero 24, 2015, 12:35:14 PM

Tema anterior - Siguiente tema

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

Febrero 24, 2015, 12:35:14 PM Ultima modificación: Febrero 24, 2015, 01:16:30 PM por Expermicid
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
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:

Código: php
El número: 837799 Genera un total de: 525