Problem #74 Difficulty: 15%

Digit Factorial Chains

Solution Language: Java

Problem Statement

The number 145 is well known for the property that the sum of the factorial of its digits is equal to 145:

1! + 4! + 5! = 1 + 24 + 120 = 145

Perhaps less well known is 169, in that it produces the longest chain of numbers that link back to 169; it turns out that there are only three such loops that exist:

  • 169 → 363601 → 1454 → 169
  • 871 → 45361 → 871
  • 872 → 45362 → 872

It is not difficult to prove that EVERY starting number will eventually get stuck in a loop. For example,

  • 69 → 363600 → 1454 → 169 → 363601 (→ 1454)
  • 78 → 45360 → 871 → 45361 (→ 871)
  • 540 → 145 (→ 145)

Starting with 69 produces a chain of five non-repeating terms, but the longest non-repeating chain with a starting number below one million is sixty terms.

How many chains, with a starting number below one million, contain exactly sixty non-repeating terms?

Approach

The solution involves:

  1. For each number below one million, computing its factorial digit sum chain
  2. Tracking visited numbers to detect loops
  3. Counting the chain length until a repeated number is found
  4. Using memoization to speed up computation for previously seen numbers
  5. Counting numbers with exactly 60 non-repeating terms