52 lines
1.4 KiB
Java
52 lines
1.4 KiB
Java
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<Long, List<Long>> 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<Long> 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};
|
|
}
|
|
}
|