title: The Collatz Sequence problem
body: <p>I'm trying to solve this problem, its not a homework question, its just code I'm submitting to uva.onlinejudge.org so I can learn better java trough examples. Here is the problem sample input :</p>
  
  <pre><code> 3 100
   34 100
   75 250
   27 2147483647
   101 304
   101 303
   -1 -1
  </code></pre>
  
  <p>Here is simple output :</p>
  
  <pre><code> Case 1: A = 3, limit = 100, number of terms = 8
   Case 2: A = 34, limit = 100, number of terms = 14
   Case 3: A = 75, limit = 250, number of terms = 3
   Case 4: A = 27, limit = 2147483647, number of terms = 112
   Case 5: A = 101, limit = 304, number of terms = 26
   Case 6: A = 101, limit = 303, number of terms = 1
  </code></pre>
  
  <p>The thing is this has to execute within 3sec time interval otherwise your question won't be accepted as solution, here is with what I've come up so far, its working as it should just the execution time is not within 3 seconds, here is code :</p>
  
  <pre><code>import java.util.Scanner;
  
  class Main {
    public static void main(String[] args) {
      Scanner stdin = new Scanner(System.in);
      int start;
      int limit;
      int terms;
      int a = 0;
  
      while (stdin.hasNext()) {
        start = stdin.nextInt();
        limit = stdin.nextInt();
        if (start &gt; 0) {
          terms = getLength(start, limit);
          a++;
        } else {
          break;
        }
        System.out.println("Case "+a+": A = "+start+", limit = "+limit+", number of terms = "+terms);
      }
    }
  
    public static int getLength(int x, int y) {
      int length = 1;
      while (x != 1) {
        if (x &lt;= y) {
          if ( x % 2 == 0) {
            x = x / 2;
            length++;
          }else{
            x = x * 3 + 1;
            length++;
          }
        } else {
          length--;
          break;
        }
      }
  
      return length;
    }
  }
  </code></pre>
  
  <p>And yes here is how its meant to be solved :</p>
  
  <p>An algorithm given by Lothar Collatz produces sequences of integers, and is described as follows:</p>
  
  <pre><code>Step 1:
      Choose an arbitrary positive integer A as the first item in the sequence. 
  Step 2:
      If A = 1 then stop. 
  Step 3:
      If A is even, then replace A by A / 2 and go to step 2. 
  Step 4:
      If A is odd, then replace A by 3 * A + 1 and go to step 2. 
  </code></pre>
  
  <p>And yes my question is <strong>how can I make it work inside 3 seconds time interval?</strong></p>