class FuscSequence { static void main(String[] args) { println("Show the first 61 fusc numbers (starting at zero) in a horizontal format") for (int n = 0; n < 61; n++) { printf("%,d ", fusc[n]) } println() println() println("Show the fusc number (and its index) whose length is greater than any previous fusc number length.") int start = 0 for (int i = 0; i <= 5; i++) { int val = i != 0 ? (int) Math.pow(10, i) : -1 for (int j = start; j < FUSC_MAX; j++) { if (fusc[j] > val) { printf("fusc[%,d] = %,d%n", j, fusc[j]) start = j break } } } } private static final int FUSC_MAX = 30000000 private static int[] fusc = new int[FUSC_MAX] static { fusc[0] = 0 fusc[1] = 1 for (int n = 2; n < FUSC_MAX; n++) { int n2 = (int) (n / 2) int n2m = (int) ((n - 1) / 2) int n2p = (int) ((n + 1) / 2) fusc[n] = n % 2 == 0 ? fusc[n2] : fusc[n2m] + fusc[n2p] } } }