Collatz Sequence Sequence Problem

I am trying to solve this problem, it is not a matter of homework, its just the code that I am sending to uva.onlinejudge.org so that I can better learn Java examples. The following is an example of a problem input:

3 100 34 100 75 250 27 2147483647 101 304 101 303 -1 -1 

Here is a simple conclusion:

  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 

The fact is that this should be done within a three-second interval, otherwise your question will not be accepted as a solution, but with what I have come up with so far, its work should consist only in that the execution time is not within 3 seconds, here is the 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 > 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 <= y) { if ( x % 2 == 0) { x = x / 2; length++; }else{ x = x * 3 + 1; length++; } } else { length--; break; } } return length; } } 

And yes, here's how to solve it:

The algorithm that Lothar Collaz gives produces sequences of integers and is described as follows:

 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. 

And yes, my question is: how can I make it work with an interval of 3 seconds?

+4
source share
1 answer

From Googling, I found this thread where a couple of other people faced the same problem, and instead the solution should use 64-bit arithmetic of 32-bit arithmetic.

Try changing int to long and see if that helps.

+5
source

Source: https://habr.com/ru/post/1306026/


All Articles