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;
}