import java.util.*; public class MultiplicativeDigitalRoot { public static void main(String[] args) { System.out.println("NUMBER MDR MP"); for (long n : new long[]{123321, 7739, 893, 899998}) { long[] a = multiplicativeDigitalRoot(n); System.out.printf("%6d %4d %4d%n", a[0], a[1], a[2]); } System.out.println(); Map> table = new HashMap<>(); for (long i = 0; i < 10; i++) table.put(i, new ArrayList<>()); for (long cnt = 0, n = 0; cnt < 10;) { long[] res = multiplicativeDigitalRoot(n++); List list = table.get(res[1]); if (list.size() < 5) { list.add(res[0]); cnt = list.size() == 5 ? cnt + 1 : cnt; } } System.out.println("MDR: first five numbers with same MDR"); table.forEach((key, lst) -> { System.out.printf("%3d: ", key); lst.forEach(e -> System.out.printf("%6s ", e)); System.out.println(); }); } public static long[] multiplicativeDigitalRoot(long n) { int mp = 0; long mdr = n; while (mdr > 9) { long m = mdr; long total = 1; while (m > 0) { total *= m % 10; m /= 10; } mdr = total; mp++; } return new long[]{n, mdr, mp}; } }