有限冪零羣判定算法

GAP命令爲:
gap> G:=SmallGroup(8,3);;IsNilpotentGroup(G);n:=Size(G);L:=Elements(G);;for i1 in L do for i2 in L do Print(Position(L,i1*i2),",");od;Print("\n");od;
true
8
1,2,3,4,5,6,7,8,
2,1,5,6,3,4,8,7,
3,8,1,7,6,5,4,2,
4,6,7,1,8,2,3,5,
5,7,2,8,4,3,6,1,
6,4,8,2,7,1,5,3,
7,5,4,3,2,8,1,6,
8,3,6,5,1,7,2,4,

非Abel冪零羣的例子、非冪零可解羣的例子
證明:S_3、Q_8、D_4、9種16階非Abel羣、2種24階非Abel冪零羣(D_8×C_3,Q_8×C_3)都是非Abel冪零羣。
證明:D_6、A_4、Q_12、10種24階非冪零可解羣(二面體羣D_24、特殊線性羣SL(2,3),雙循環羣Dic24=Q_24,Q_12×C_2,S_4,A_4×C_2,D_12×C_2=S_3×K_4,S_3×C_4,C_3和C_8的非平凡半直積,C_3和D_8的在覈K_4下的半直積。)都是非冪零可解羣。
C_4:1交換羣
K_4:1交換羣
S_3:-1非冪零羣
D_4:2級冪零羣
GAP4[16,3]:2級冪零羣
GAP4[16,4]:2級冪零羣
M_16:2級冪零羣
D_8:3級冪零羣
QD_16:3級冪零羣
Q_16:3級冪零羣
D_4×C_2:2級冪零羣
GAP4[16,12]:2級冪零羣
GAP4[16,13]:2級冪零羣
D_9:-1非冪零羣
GAP4[24,1]:-1非冪零羣
SL(2,3):-1非冪零羣
GAP4[24,4]:-1非冪零羣
C_4×S_3:-1非冪零羣
D_12:-1非冪零羣
Q_12×C_2:-1非冪零羣
GAP4[24,8]:-1非冪零羣
C_3×D_4:2級冪零羣
C_3×Q_8:2級冪零羣
S_4:-1非冪零羣
C_2×A_4:-1非冪零羣
C_2×C_2×S_3:-1非冪零羣
C_8:1交換羣
Q_8:2級冪零羣
Q_12:-1非冪零羣
C_12:1交換羣
A_4:-1非冪零羣
D_6:-1非冪零羣
C_2×C_2×C_3:1交換羣

int Inv(const vector<vector<int>> &vvG,int j)
{
    int N=vvG.size();
    for(int i=0;i<N;i++)
    {
        int ij=vvG[i][j]-1;
        if(ij==0)
            return i;
    }
    return -1;
}

// 降中心列:G,G'=[G,G],G''=[G',G],……
vector<int> commutatorOfGn(const vector<int> &vGn,const vector<vector<int>> &vvG)
{
    vector<int> ret;
    int M=vGn.size();
    int N=vvG.size();
    for(int k=0;k<M;k++)
    {
        int i=vGn[k];
        int I=Inv(vvG,i);
        for(int j=0;j<N;j++)
        {
            int ij=vvG[i][j]-1;
            int J=Inv(vvG,j);
            int IJ=vvG[I][J]-1;
            int ijIJ=vvG[ij][IJ]-1;
            ret.push_back(ijIJ);
        }
    }
    sort(ret.begin(),ret.end());
    ret.erase(unique(ret.begin(),ret.end()),ret.end());
    return ret;
}

//-2不是羣
//-1是非冪零羣
//>=0是n級冪零羣:0是平凡羣,1是交換羣,2以上是非交換冪零羣
int IsNilpotentGroup(int *R,int N,int delt=1)
{
    if(!IsGroup(R,N,delt))
        return -2;
    if(N==1)
        return 0;
    vector<vector<int> > vvG=Arr2ToVec2(R,N,delt);
    vector<int> vGn;
    for(int i=0;i<N;i++)
    {
        vGn.push_back(i);
    }
    for(int i=0;i<N;i++)
    {
        int n=vGn.size();
        vGn=commutatorOfGn(vGn,vvG);
        int n1=vGn.size();
        if(n1==1)
            return i+1;
        if(n1>1 && n==n1)
            return -1;
    }
    return -1;
}

string IsNilpotentRetInfo(int iRet)
{
    if(iRet==-2)
        return "-2不是羣";
    if(iRet==-1)
        return "-1非冪零羣";
    if(iRet==0)
        return "0平凡羣";
    if(iRet==1)
        return "1交換羣";

    char sz[30]={0};
    sprintf(sz,"%d級冪零羣",iRet);
    return sz;
}

int _tmain(int argc, _TCHAR* argv[])
{
    {
        int *Arr[]={g_C4,g_C2C2,g_S3,g_D4,g_16_3,g_16_4,g_M16,g_D8,g_QD16,g_Q16,g_D4C2,g_16_12,g_16_13,g_D9,g_24_1,g_24_3,g_24_4,g_C4S3,g_D12,g_Q12C2,g_24_8,g_C3D4,g_C3Q8,g_S4,g_C2A4,g_C2C2S3,&g_C8Mul[0][0],&g_Q8Mul[0][0],&g_Q12[0][0],&g_C12[0][0],&g_A4[0][0],&g_D6[0][0],&g_C2C2C3[0][0]};
        int Nrr[]={4,4,6,8,16,16,16,16,16,16,16,16,16,18,24,24,24,24,24,24,24,24,24,24,24,24,8,8,12,12,12,12,12};
        int Drr[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0};
        const char *szName[]={"C_4","K_4","S_3","D_4","GAP4[16,3]","GAP4[16,4]","M_16","D_8","QD_16","Q_16","D_4×C_2","GAP4[16,12]","GAP4[16,13]","D_9","GAP4[24,1]","SL(2,3)","GAP4[24,4]","C_4×S_3","D_12","Q_12×C_2","GAP4[24,8]","C_3×D_4","C_3×Q_8","S_4","C_2×A_4","C_2×C_2×S_3","C_8","Q_8","Q_12","C_12","A_4","D_6","C_2×C_2×C_3"};
        int n=sizeof(Arr)/sizeof(Arr[0]);
        for(int i=0;i<n;i++)
        {
            int *A=Arr[i];  
            int N=Nrr[i];
            int iret=IsNilpotentGroup(A,N,Drr[i]);
            string str=IsNilpotentRetInfo(iret);
            printf("%s:%s\n",szName[i],str.c_str());
        }
        system("pause");
        return 0;
    }
    system("pause");
    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章