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

Posted 华仔Ivan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了100阶以下子群和商群的搜索相关的知识,希望对你有一定的参考价值。

D:\\MathTool\\gaptool>Subgroup 11 0 100
置换群S_11的子群:
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
置换群S_11的子群:
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
置换群S_5的子群:
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;

以上是关于100阶以下子群和商群的搜索的主要内容,如果未能解决你的问题,请参考以下文章

正规子群和商群

循环群对称群陪集和拉格朗日定理正规子群和商群

2020年上半年总结

第二章 2.群中的等价关系 -- 陪集,共轭,正规子群与商群

算法学习笔记(11): 原根

代数群的结构,Borel子群