login
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.
1

%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