Subgroups of $\operatorname{GL}_2(\mathbb Z/8\mathbb Z)$ Is there some program or a location which would allow me to work and calculate with the subgroups of the group $\operatorname{GL}_2(\mathbb Z/8\mathbb Z)$?
 A: GAP is open source. You can download and install it as explained here. Then, for example, you can do the following.
Create the group in question:
gap> G := GL(2, Integers mod 8);
GL(2,Z/8Z)
gap> Size(G);
1536

Calculate conjugacy classes of its subgroups (long output, takes a minute or two):
gap> ConjugacyClassesSubgroups(G);
[ Group([],[ [ ZmodnZObj( 1, 8 ), ZmodnZObj( 0, 8 ) ], [ ZmodnZObj( 0, 8 ), ZmodnZObj( 1, 8 ) ] ])^G, 
  Group([ [ [ ZmodnZObj( 3, 8 ), ZmodnZObj( 0, 8 ) ], [ ZmodnZObj( 0, 8 ), ZmodnZObj( 3, 8 ) ] ] ])^G, 
  Group([ [ [ ZmodnZObj( 5, 8 ), ZmodnZObj( 0, 8 ) ], [ ZmodnZObj( 0, 8 ), ZmodnZObj( 5, 8 ) ] ] ])^G, 
...
  Group([ [ [ ZmodnZObj( 1, 8 ), ZmodnZObj( 0, 8 ) ], [ ZmodnZObj( 0, 8 ), ZmodnZObj( 7, 8 ) ] ], 
      [ [ ZmodnZObj( 1, 8 ), ZmodnZObj( 0, 8 ) ], [ ZmodnZObj( 4, 8 ), ZmodnZObj( 1, 8 ) ] ], 
      [ [ ZmodnZObj( 1, 8 ), ZmodnZObj( 0, 8 ) ], [ ZmodnZObj( 2, 8 ), ZmodnZObj( 7, 8 ) ] ], 
      [ [ ZmodnZObj( 1, 8 ), ZmodnZObj( 4, 8 ) ], [ ZmodnZObj( 0, 8 ), ZmodnZObj( 1, 8 ) ] ], 
      [ [ ZmodnZObj( 3, 8 ), ZmodnZObj( 0, 8 ) ], [ ZmodnZObj( 0, 8 ), ZmodnZObj( 3, 8 ) ] ], 
      [ [ ZmodnZObj( 5, 8 ), ZmodnZObj( 0, 8 ) ], [ ZmodnZObj( 0, 8 ), ZmodnZObj( 3, 8 ) ] ], 
      [ [ ZmodnZObj( 1, 8 ), ZmodnZObj( 2, 8 ) ], [ ZmodnZObj( 0, 8 ), ZmodnZObj( 1, 8 ) ] ], 
      [ [ ZmodnZObj( 0, 8 ), ZmodnZObj( 7, 8 ) ], [ ZmodnZObj( 1, 8 ), ZmodnZObj( 7, 8 ) ] ], 
      [ [ ZmodnZObj( 0, 8 ), ZmodnZObj( 1, 8 ) ], [ ZmodnZObj( 5, 8 ), ZmodnZObj( 0, 8 ) ] ] ])^G, GL(2,Z/8Z)^G ]
gap> time;
88590

The time; command returns the CPU time in milliseconds spent by GAP to perform the last command.
To demonstrate several other features of GAP, you can assign this list to a variable called cc. In this assignment I use double semicolon ;; instead of a single one to suppress the output. Also, the second call to ConjugacyClassesSubgroups for the same group G returns the result at no cost, since it retrieves the data stored in G after the previous call:
gap> cc:=ConjugacyClassesSubgroups(G);;
gap> time; 
1

Now, let's take some class, e.g. cc[12]:
gap> c:=cc[12];
Group([ [ [ ZmodnZObj( 3, 8 ), ZmodnZObj( 0, 8 ) ], [ ZmodnZObj( 0, 8 ), ZmodnZObj( 7, 8 ) ] ] ])^G

It contains 6 conjugate subgroups:
gap> Size(c);
6

And their list can be obtained as follows:
gap> AsList(c);
[ <group of 2x2 matrices of size 2 over (Integers mod 8)>, <group of 2x2 matrices of size 2 over (Integers mod 8)>, 
  <group of 2x2 matrices of size 2 over (Integers mod 8)>, <group of 2x2 matrices of size 2 over (Integers mod 8)>, 
  <group of 2x2 matrices of size 2 over (Integers mod 8)>, <group of 2x2 matrices of size 2 over (Integers mod 8)> ]

Hope this gives an idea what you can do with GAP. Further questions that may be useful are:


*

*List Conjugacy Classes in GAP?

*How to find all subgroups of a group in GAP

*How do I get the subgroups of my group? (GAP F.A.Q.)

*Which resources are available to self-study GAP?
A: Apart from GAP, the other software system that specializes in group theoretical calculations is Magma. Unlike GAP, Magma is not open source, but there is a calculator that is available for use online here.  A disadvantage of this is that you have to type in all of your commands in advance and then run them all. Here is an example:
Input:
G := GL(2, Integers(8));
S := Subgroups(G);   //representatives of conjugacy classes of subgroups
#S;
AS := AllSubgroups(G);
#AS;

Output:
2265
24587

which are the numbers of conjugacy classes of subgroups, and all subgroups, respectively.
