Project-Euler / 14
Problem 14 asks:
The following iterative sequence is defined for the set of positive integers:
n → n/2 (n is even)
n → 3n + 1 (n is odd)Which starting number, under one million, produces the longest chain?
Here’s my solution in Java:
public class Problem14 { public static void main(String[] args) { final int MAX = 1_000_000; int longestChain = 0; int result = -1; int cache[] = new int[MAX]; for (int n = 2; n < MAX; n++) { int terms = 1; long m = n; while (m >= n) { m = (m % 2 == 0) ? m / 2 : 3 * m + 1; terms++; } terms += cache[(int)m]; // safe to cast because m < n cache[n] = terms; if (terms > longestChain) { longestChain = terms; result = n; } } System.out.println(result); } }
It stores the results it finds as it goes, so it doesn’t have to repeat the same computations.