%I #22 Jun 07 2015 18:01:04
%S 1,2,2,4,2,6,2,2,6,4,10,2,2,12,6,4,2,4,2,16,6,18,4,2,6,2,10,22,2,2,2,
%T 20,12,18,6,2,28,4,2,30,8,2,10,2,16,12,2,6,2,36,18,12,2,4,2,2,40,6,2,
%U 42,10,2,12,2,22,46,4,2,2,42,20
%N Irregular triangular array read by rows. Row n gives the decomposition of the multiplicative group of integers modulo n as a direct product of cyclic groups C_1 X C_2 X ... X C_k, where |C_i| divides |C_j|, i>j.
%C Row lengths are A046072.
%C The products of the terms in each row are A000010.
%C First column is A002322.
%C Row 2^k is [2, 2^(k-2)] for k > 2. - _Tom Edgar_, May 31 2015
%C Row p^k (and row 2*p^k) is [(p-1)*p^(k-1)] for odd prime p. - _Tom Edgar_, May 31 2015
%C The number of distinct groups over numbers less than or equal to 10^k for k=1,2,3,4,5,6 is 5, 50, 447, 4060, 36655, 335714.
%D Shanks, D. Solved and Unsolved Problems in Number Theory, 4th ed. New York: Chelsea, pp. 92-93, 1993.
%H Eric Weisstein's World of Mathematics, <a href="http://mathworld.wolfram.com/ModuloMultiplicationGroup.html">Modulo Multiplication Group</a>
%H Wikipedia, <a href="http://en.wikipedia.org/wiki/Multiplicative_group_of_integers_modulo_n">Multiplicative Group of Integers Modulo n.</a>
%e 1;
%e 2;
%e 2;
%e 4;
%e 2;
%e 6;
%e 2, 2;
%e 6;
%e 4;
%e 10;
%e 2, 2;
%e 12;
%e 6;
%e 4, 2;
%e 4, 2;
%e 16;
%e 6;
%e 18;
%e 4, 2;
%e 6, 2;
%e 10;
%e 22;
%e 2, 2, 2;
%e The row for n=8 reads: 2,2 because the multiplicative group mod 8 is isomorphic to C_2 X C_2.
%t f[{p_, e_}] := {FactorInteger[p - 1][[All, 1]]^
%t FactorInteger[p - 1][[All, 2]],
%t FactorInteger[p^(e - 1)][[All, 1]]^
%t FactorInteger[p^(e - 1)][[All, 2]]};
%t fun[lst_] :=
%t Module[{int, num, res},
%t int = Sort /@ GatherBy[Join @@ (FactorInteger /@ lst), First];
%t num = Times @@ Power @@@ (Last@# & /@ int);
%t res = Flatten[Map[Power @@ # &, Most /@ int, {2}]];
%t {num, res}]
%t rec[lt_] :=
%t First@NestWhile[{Append[#[[1]], fun[#[[2]]][[1]]],
%t fun[#[[2]]][[2]]} &, {{}, lt}, Length[#[[2]]] > 0 &];
%t Table[If[! IntegerQ[n/8],
%t DeleteCases[rec[Flatten[Map[f, FactorInteger[n]]]], 1],
%t DeleteCases[
%t rec[Join[{2, 2^(FactorInteger[n][[1, 2]] - 2)},
%t Flatten[Map[f, Drop[FactorInteger[n], 1]]]]], 1]], {n, 2,
%t 50}] /. {} -> {1} // Grid
%K nonn,tabf
%O 2,2
%A _Geoffrey Critzer_ and Mark Dooris, May 30 2015