# 100阶以下子群和商群的搜索

D:\MathTool\gaptool>Subgroup 11 0 100

0,1->[1,2,3,4,5,6,7,8,9,10,11],[1,2,3,4,5,6,7,8,9,11,10]=>GAP[2,1]:
0,3->[1,2,3,4,5,6,7,8,9,10,11],[1,2,3,4,5,6,7,8,10,11,9]=>GAP[3,1]:
0,9->[1,2,3,4,5,6,7,8,9,10,11],[1,2,3,4,5,6,7,9,10,11,8]=>GAP[4,1]:
0,27->[1,2,3,4,5,6,7,8,9,10,11],[1,2,3,4,5,6,8,7,10,11,9]=>GAP[6,2]:
0,33->[1,2,3,4,5,6,7,8,9,10,11],[1,2,3,4,5,6,8,9,10,11,7]=>GAP[5,1]:
1,2->[1,2,3,4,5,6,7,8,9,11,10],[1,2,3,4,5,6,7,8,10,9,11]=>GAP[6,1]:
1,6->[1,2,3,4,5,6,7,8,9,11,10],[1,2,3,4,5,6,7,9,8,10,11]=>GAP[4,2]:
1,8->[1,2,3,4,5,6,7,8,9,11,10],[1,2,3,4,5,6,7,9,10,8,11]=>GAP[24,12]:
1,16->[1,2,3,4,5,6,7,8,9,11,10],[1,2,3,4,5,6,7,10,11,8,9]=>GAP[8,3]:
1,26->[1,2,3,4,5,6,7,8,9,11,10],[1,2,3,4,5,6,8,7,10,9,11]=>GAP[12,4]:
3,7->[1,2,3,4,5,6,7,8,10,11,9],[1,2,3,4,5,6,7,9,8,11,10]=>GAP[12,3]:
3,30->[1,2,3,4,5,6,7,8,10,11,9],[1,2,3,4,5,6,8,9,7,10,11]=>GAP[60,5]:
7,26->[1,2,3,4,5,6,7,9,8,11,10],[1,2,3,4,5,6,8,7,10,9,11]=>GAP[10,1]:
7,32->[1,2,3,4,5,6,7,9,8,11,10],[1,2,3,4,5,6,8,9,10,7,11]=>GAP[20,3]:
^C
D:\MathTool\gaptool>Subgroup 11 150 1000

150,151->[1,2,3,4,5,7,8,9,6,10,11],[1,2,3,4,5,7,8,9,6,11,10]=>GAP[8,2]:
150,168->[1,2,3,4,5,7,8,9,6,10,11],[1,2,3,4,5,7,9,6,8,10,11]=>GAP[24,12]:
150,169->[1,2,3,4,5,7,8,9,6,10,11],[1,2,3,4,5,7,9,6,8,11,10]=>GAP[48,48]:
150,176->[1,2,3,4,5,7,8,9,6,10,11],[1,2,3,4,5,7,9,8,10,6,11]=>GAP[20,3]:
150,264->[1,2,3,4,5,7,8,9,6,10,11],[1,2,3,4,5,8,7,6,9,10,11]=>GAP[8,3]:
150,288->[1,2,3,4,5,7,8,9,6,10,11],[1,2,3,4,5,8,9,6,7,10,11]=>GAP[4,1]:
150,727->[1,2,3,4,5,7,8,9,6,10,11],[1,2,3,4,6,5,7,9,8,11,10]=>GAP[40,-1]:
N0C1Nk=1,11,20,4,0,4,0,0,[[0,20],[1,20]],[[1,1,1],[2,1,1],[2,5,10],[4,5,20],[5,4,4],[10,4,4]]
S2=0,11,65,10,60,94,300,240
kKEZDCANS=10,[2,0,2,6,0,0,0,0],20,2,5,0,0,0,1
151,153->[1,2,3,4,5,7,8,9,6,11,10],[1,2,3,4,5,7,8,9,10,11,6]=>GAP[72,40]:
151,160->[1,2,3,4,5,7,8,9,6,11,10],[1,2,3,4,5,7,8,10,11,6,9]=>GAP[36,9]:
^C
D:\MathTool\gaptool>Subgroup 6
720阶置换群S_6的子群:
0,1->[1,2,3,4,5,6],[1,2,3,4,6,5]=>GAP[2,1]:
0,3->[1,2,3,4,5,6],[1,2,3,5,6,4]=>GAP[3,1]:
0,9->[1,2,3,4,5,6],[1,2,4,5,6,3]=>GAP[4,1]:
0,27->[1,2,3,4,5,6],[1,3,2,5,6,4]=>GAP[6,2]:
0,33->[1,2,3,4,5,6],[1,3,4,5,6,2]=>GAP[5,1]:
1,2->[1,2,3,4,6,5],[1,2,3,5,4,6]=>GAP[6,1]:
1,6->[1,2,3,4,6,5],[1,2,4,3,5,6]=>GAP[4,2]:
1,8->[1,2,3,4,6,5],[1,2,4,5,3,6]=>GAP[24,12]:
1,16->[1,2,3,4,6,5],[1,2,5,6,3,4]=>GAP[8,3]:
1,26->[1,2,3,4,6,5],[1,3,2,5,4,6]=>GAP[12,4]:
1,128->[1,2,3,4,6,5],[2,1,4,5,3,6]=>GAP[48,48]:
1,146->[1,2,3,4,6,5],[2,3,1,5,4,6]=>GAP[18,3]:
1,150->[1,2,3,4,6,5],[2,3,4,1,5,6]=>GAP[8,2]:
1,160->[1,2,3,4,6,5],[2,3,5,6,1,4]=>GAP[72,40]:
1,208->[1,2,3,4,6,5],[2,5,4,6,1,3]=>GAP[24,13]:
^C
D:\MathTool\gaptool>Subgroup 3
6阶置换群S_3的子群:
0,1->[1,2,3],[1,3,2]=>GAP[2,1]:
0,3->[1,2,3],[2,3,1]=>GAP[3,1]:
1,2->[1,3,2],[2,1,3]=>GAP[6,1]:

D:\MathTool\gaptool>Subgroup 4
24阶置换群S_4的子群:
0,1->[1,2,3,4],[1,2,4,3]=>GAP[2,1]:
0,3->[1,2,3,4],[1,3,4,2]=>GAP[3,1]:
0,9->[1,2,3,4],[2,3,4,1]=>GAP[4,1]:
1,2->[1,2,4,3],[1,3,2,4]=>GAP[6,1]:
1,6->[1,2,4,3],[2,1,3,4]=>GAP[4,2]:
1,8->[1,2,4,3],[2,3,1,4]=>GAP[24,12]:
1,16->[1,2,4,3],[3,4,1,2]=>GAP[8,3]:
3,7->[1,3,4,2],[2,1,4,3]=>GAP[12,3]:

D:\MathTool\gaptool>Subgroup 5
120阶置换群S_5的子群:
0,1->[1,2,3,4,5],[1,2,3,5,4]=>GAP[2,1]:
0,3->[1,2,3,4,5],[1,2,4,5,3]=>GAP[3,1]:
0,9->[1,2,3,4,5],[1,3,4,5,2]=>GAP[4,1]:
0,27->[1,2,3,4,5],[2,1,4,5,3]=>GAP[6,2]:
0,33->[1,2,3,4,5],[2,3,4,5,1]=>GAP[5,1]:
1,2->[1,2,3,5,4],[1,2,4,3,5]=>GAP[6,1]:
1,6->[1,2,3,5,4],[1,3,2,4,5]=>GAP[4,2]:
1,8->[1,2,3,5,4],[1,3,4,2,5]=>GAP[24,12]:
1,16->[1,2,3,5,4],[1,4,5,2,3]=>GAP[8,3]:
1,26->[1,2,3,5,4],[2,1,4,3,5]=>GAP[12,4]:
D:\MathTool\gaptool>Subgroup 5 0 120 3

0,1,2->[1,2,3,4,5],[1,2,3,5,4],[1,2,4,3,5]=>GAP[6,1]:
0,1,6->[1,2,3,4,5],[1,2,3,5,4],[1,3,2,4,5]=>GAP[4,2]:
0,1,8->[1,2,3,4,5],[1,2,3,5,4],[1,3,4,2,5]=>GAP[24,12]:
0,1,16->[1,2,3,4,5],[1,2,3,5,4],[1,4,5,2,3]=>GAP[8,3]:
0,1,26->[1,2,3,4,5],[1,2,3,5,4],[2,1,4,3,5]=>GAP[12,4]:
0,1,30->[1,2,3,4,5],[1,2,3,5,4],[2,3,1,4,5]=>GAP[6,2]:
0,3,4->[1,2,3,4,5],[1,2,4,5,3],[1,2,5,3,4]=>GAP[3,1]:
0,3,7->[1,2,3,4,5],[1,2,4,5,3],[1,3,2,5,4]=>GAP[12,3]:
0,3,30->[1,2,3,4,5],[1,2,4,5,3],[2,3,1,4,5]=>GAP[60,5]:
0,7,17->[1,2,3,4,5],[1,3,2,5,4],[1,4,5,3,2]=>GAP[4,1]:
0,7,26->[1,2,3,4,5],[1,3,2,5,4],[2,1,4,3,5]=>GAP[10,1]:
0,7,32->[1,2,3,4,5],[1,3,2,5,4],[2,3,4,1,5]=>GAP[20,3]:

D:\MathTool\gaptool>quotientGroup 3
6阶置换群S_3的商群:
0,3->[1,2,3],[2,3,1]=>S_3/GAP[3,1]=GAP[2,1]:

D:\MathTool\gaptool>quotientGroup 4
24阶置换群S_4的商群:
3,7->[1,3,4,2],[2,1,4,3]=>S_4/GAP[12,3]=GAP[2,1]:
7,16->[2,1,4,3],[3,4,1,2]=>S_4/GAP[4,2]=GAP[6,1]:

D:\MathTool\gaptool>quotientGroup 4 0 0
24阶置换群S_4的商群:
3,7,8->[1,3,4,2],[2,1,4,3],[2,3,1,4]=>S_4/GAP[12,3]=GAP[2,1]:
7,16,17->[2,1,4,3],[3,4,1,2],[3,4,2,1]=>S_4/GAP[4,2]=GAP[6,1]:

D:\MathTool\gaptool>quotientGroup 5
120阶置换群S_5的商群:
3,30->[1,2,4,5,3],[2,3,1,4,5]=>S_5/GAP[60,5]=GAP[2,1]:

#include"PermGroup.h"
#include"quotientGroup.h"
#include<stdio.h>
#include<stdlib.h>
#include<set>

string V2S(vector<unsigned char>& v){
string str="[";
int n=v.size();
for(int i=0;i<n;i++)
{
str+=itos(v[i]);
if(i<n-1)
str+=",";
}
str+="]";
return str;
}

set<string> gS;
set<std::pair<int,int>> gM;
int g_a=0;

void QFindquotientGroup2(int n,int m)
{
Sn sn(n);
for(int i=g_a;i<m;i++)
for(int j=i+1;j<m;j++){
vector<SnE> S;
SnE vi=sn.s_Arr[i];
SnE vj=sn.s_Arr[j];
S.push_back(vi);
S.push_back(vj);
vector<int> v;
v.push_back(i);
v.push_back(j);
Subgroup s;
bool b=s.init(&sn,v,m/2);
if(!b)
continue;
int ni=s.size();
if(sn.size()/ni>100)
continue;
int isN=IsNormalSubgroup(&sn,s.m_Set,true);
if(isN!=1)
continue;
quotientGroup G(&sn,s.m_Set);
//bool bG=IsGroup(&G);
//if(!bG)
//    continue;
int ID=IdGroup(&G);
int cnt=gM.size();
gM.insert(make_pair(G.size(),ID));
int cnt1=gM.size();
if(cnt1>cnt){
int sID=IdGroup(&s);
printf("%d,%d->%s,%s=>S_%d/GAP[%d,%d]=GAP[%d,%d]:\n",i,j,V2S(vi).c_str(),V2S(vj).c_str(),n,ni,sID,G.size(),ID);
}
if(ID==-1){
string N0=calcN0(&G);
string C1=calcC1(&G);
string Nk=calcNk(&G);
string S2=calcS2(&G);
string kKEZDCANS=calckKEZDCANS(&G);
string strG=N0+C1+Nk+S2+kKEZDCANS;
if(gS.find(strG)==gS.end()){
printf("N0C1Nk=%s,%s,%s\n",N0.c_str(),C1.c_str(),Nk.c_str());
printf("S2=%s\n",S2.c_str());
printf("kKEZDCANS=%s\n",kKEZDCANS.c_str());
}
gS.insert(strG);
}
}
}

void QFindquotientGroup3(int n,int m)
{
Sn sn(n);
for(int i=g_a;i<m;i++)
for(int j=i+1;j<m;j++){
for(int k=j+1;k<m;k++){
vector<SnE> S;
SnE vi=sn.s_Arr[i];
SnE vj=sn.s_Arr[j];
SnE vk=sn.s_Arr[k];
S.push_back(vi);
S.push_back(vj);
S.push_back(vk);
vector<int> v;
v.push_back(i);
v.push_back(j);
Subgroup s;
bool b=s.init(&sn,v,m/2);
if(!b)
continue;
int ni=s.size();
if(sn.size()/ni>100)
continue;
int isN=IsNormalSubgroup(&sn,s.m_Set,true);
if(isN!=1)
continue;
quotientGroup G(&sn,s.m_Set);
//bool bG=IsGroup(&G);
//if(!bG)
//    continue;
int ID=IdGroup(&G);
int cnt=gM.size();
gM.insert(make_pair(G.size(),ID));
int cnt1=gM.size();
if(cnt1>cnt){
int sID=IdGroup(&s);
printf("%d,%d,%d->%s,%s,%s=>S_%d/GAP[%d,%d]=GAP[%d,%d]:\n",i,j,k,V2S(vi).c_str(),V2S(vj).c_str(),V2S(vk).c_str(),n,ni,sID,G.size(),ID);
}
if(ID==-1){
string N0=calcN0(&G);
string C1=calcC1(&G);
string Nk=calcNk(&G);
string S2=calcS2(&G);
string kKEZDCANS=calckKEZDCANS(&G);
string strG=N0+C1+Nk+S2+kKEZDCANS;
if(gS.find(strG)==gS.end()){
printf("N0C1Nk=%s,%s,%s\n",N0.c_str(),C1.c_str(),Nk.c_str());
printf("S2=%s\n",S2.c_str());
printf("kKEZDCANS=%s\n",kKEZDCANS.c_str());
}
gS.insert(strG);
}
}
}
}

int fact(int n)
{
static int result[]={1,2,6,24,120,720,5040,40320,362880,362880};
int idx=(n<1||n>10?0:n-1);
return result[idx];
}

int main(int argc, char * argv[])
{
char sz[100]={0};
if(argc<2)
{
printf("Usage:  quotientGroup n [g_a] [r]\n");
return 0;
}
int n=atoi(argv[1]);
g_a=argc>2?atoi(argv[2]):0;
int r=argc>3?3:2;
if(n<1||n>10)
{
return 0;
}
int m=m=fact(n);
printf("%d阶置换群S_%d的商群:\n",m,n);
if(r==2)QFindquotientGroup2(n,m);
if(r==3)QFindquotientGroup3(n,m);
#ifdef _DEBUG
system("pause");
#endif
return 0;
}

01-17 1263

08-30 232
04-27 3万+
03-20 1782
11-15 90
06-11 1万+