Let be a natural number. We define the digit product for base to be the following: where is the number of digits in the number in base, and is the value of each digit of the number. A natural number is a multiplicative digital root if it is a fixed point for, which occurs if. For example, in base, 0 is the multiplicative digital root of 9876, as All natural numbers are preperiodic points for, regardless of the base. This is because if, then and therefore If, then trivially Therefore, the only possible multiplicative digital roots are the natural numbers, and there are no cycles other than the fixed points of.
The number of iterations needed for to reach a fixed point is the multiplicative persistence of. The multiplicative persistence is undefined if it never reaches a fixed point. In base 10, it is conjectured that there is no number with a multiplicative persistence : this is known to be true for numbers. The smallest numbers with persistence 0, 1,... are: The search for these numbers can be sped up by using additional properties of the decimal digits of these record-breaking numbers. These digits must be sorted, and, except for the first two digits, all digits must be 7, 8, or 9. There are also additional restrictions on the first two digits. Based on these restrictions, the number of candidates for -digit numbers with record-breaking persistence is only proportional to the square of, a tiny fraction of all possible -digit numbers. However, any number that is missing from the sequence above would have multiplicative persistence > 11; such numbers are believed not to exist, and would need to have over 20,000 digits if they do exist.
The example below implements the digit product described in the definition above to search for multiplicative digital roots and multiplicative persistences in Python. def digit_product -> int: if x 0: return 0 total = 1 while x > 1: if x % b 0: return 0 if x % b > 1: total = total * x = x // b return total def multiplicative_digital_root -> int: seen = while x not in seen: seen.append x = digit_product return x def multiplicative_persistence -> int: seen = while x not in seen: seen.append x = digit_product return len - 1