C++中有限羣接口的聲明與實現

D:\go20190906\src\IGroup>IGroup
GAP[8,5]=E_8:
0->[0,0,0]=>0->[0,0,0]
1->[1,1,1]=>1->[1,1,1]
2->[0,0,1]=>2->[0,0,1]
3->[0,1,0]=>3->[0,1,0]
4->[0,1,1]=>4->[0,1,1]
5->[1,0,0]=>5->[1,0,0]
6->[1,0,1]=>6->[1,0,1]
7->[1,1,0]=>7->[1,1,0]
GAP[8,5]=E_8:
1 2 3 4 5 6 7 8
2 1 8 7 6 5 4 3
3 8 1 5 4 7 6 2
4 7 5 1 3 8 2 6
5 6 4 3 1 2 8 7
6 5 7 8 2 1 3 4
7 4 6 2 8 3 1 5
8 3 2 6 7 4 5 1
6階羣GL(2,2):
0->[[1,0],[0,1]]=>0->[[1,0],[0,1]]
1->[[0,1],[1,0]]=>1->[[0,1],[1,0]]
2->[[0,1],[1,1]]=>5->[[1,1],[1,0]]
3->[[1,0],[1,1]]=>3->[[1,0],[1,1]]
4->[[1,1],[0,1]]=>4->[[1,1],[0,1]]
5->[[1,1],[1,0]]=>2->[[0,1],[1,1]]
6階羣GL(2,2):
1 2 3 4 5 6
2 1 5 6 3 4
3 4 6 5 2 1
4 3 2 1 6 5
5 6 4 3 1 2
6 5 1 2 4 3
48階羣GL(2,3):
0->[[1,0],[0,1]]=>0->[[1,0],[0,1]]
1->[[0,1],[1,0]]=>1->[[0,1],[1,0]]
2->[[0,1],[1,1]]=>38->[[2,1],[1,0]]
3->[[0,1],[1,2]]=>20->[[1,1],[1,0]]
4->[[0,1],[2,0]]=>7->[[0,2],[1,0]]
5->[[0,1],[2,1]]=>26->[[1,2],[1,0]]
6->[[0,1],[2,2]]=>44->[[2,2],[1,0]]
7->[[0,2],[1,0]]=>4->[[0,1],[2,0]]
8->[[0,2],[1,1]]=>22->[[1,1],[2,0]]
9->[[0,2],[1,2]]=>40->[[2,1],[2,0]]
10->[[0,2],[2,0]]=>10->[[0,2],[2,0]]
11->[[0,2],[2,1]]=>46->[[2,2],[2,0]]
12->[[0,2],[2,2]]=>28->[[1,2],[2,0]]
13->[[1,0],[0,2]]=>13->[[1,0],[0,2]]
14->[[1,0],[1,1]]=>16->[[1,0],[2,1]]
15->[[1,0],[1,2]]=>15->[[1,0],[1,2]]
16->[[1,0],[2,1]]=>14->[[1,0],[1,1]]
17->[[1,0],[2,2]]=>17->[[1,0],[2,2]]
18->[[1,1],[0,1]]=>24->[[1,2],[0,1]]
19->[[1,1],[0,2]]=>19->[[1,1],[0,2]]
20->[[1,1],[1,0]]=>3->[[0,1],[1,2]]
21->[[1,1],[1,2]]=>47->[[2,2],[2,1]]
22->[[1,1],[2,0]]=>8->[[0,2],[1,1]]
23->[[1,1],[2,1]]=>41->[[2,1],[2,2]]
24->[[1,2],[0,1]]=>18->[[1,1],[0,1]]
25->[[1,2],[0,2]]=>25->[[1,2],[0,2]]
26->[[1,2],[1,0]]=>5->[[0,1],[2,1]]
27->[[1,2],[1,1]]=>45->[[2,2],[1,2]]
28->[[1,2],[2,0]]=>12->[[0,2],[2,2]]
29->[[1,2],[2,2]]=>39->[[2,1],[1,1]]
30->[[2,0],[0,1]]=>30->[[2,0],[0,1]]
31->[[2,0],[0,2]]=>31->[[2,0],[0,2]]
32->[[2,0],[1,1]]=>32->[[2,0],[1,1]]
33->[[2,0],[1,2]]=>35->[[2,0],[2,2]]
34->[[2,0],[2,1]]=>34->[[2,0],[2,1]]
35->[[2,0],[2,2]]=>33->[[2,0],[1,2]]
36->[[2,1],[0,1]]=>36->[[2,1],[0,1]]
37->[[2,1],[0,2]]=>43->[[2,2],[0,2]]
38->[[2,1],[1,0]]=>2->[[0,1],[1,1]]
39->[[2,1],[1,1]]=>29->[[1,2],[2,2]]
40->[[2,1],[2,0]]=>9->[[0,2],[1,2]]
41->[[2,1],[2,2]]=>23->[[1,1],[2,1]]
42->[[2,2],[0,1]]=>42->[[2,2],[0,1]]
43->[[2,2],[0,2]]=>37->[[2,1],[0,2]]
44->[[2,2],[1,0]]=>6->[[0,1],[2,2]]
45->[[2,2],[1,2]]=>27->[[1,2],[1,1]]
46->[[2,2],[2,0]]=>11->[[0,2],[2,1]]
47->[[2,2],[2,1]]=>21->[[1,1],[1,2]]
48階羣GL(2,3):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
2 1 19 25 31 37 43 14 20 26 32 38 44 8 21 27 39 45 3 9 15 28 33 40 4 10 16 22 34 46 5 11 23 29 41 47 6 12 17 24 35 48 7 13 18 30 36 42
3 15 22 27 35 42 47 16 21 28 36 41 48 10 24 30 37 44 4 8 17 29 31 38 2 9 18 23 32 43 6 13 19 26 40 46 7 11 1 20 33 45 5 12 14 25 34 39
4 17 23 30 33 39 46 18 24 29 34 40 45 9 20 25 42 48 2 10 1 26 35 41 3 8 14 19 36 47 7 12 22 28 38 43 5 13 15 21 31 44 6 11 16 27 32 37
5 14 20 26 32 38 44 1 19 25 31 37 43 11 23 29 41 47 7 13 18 30 36 42 6 12 17 24 35 48 2 8 21 27 39 45 4 10 16 22 34 46 3 9 15 28 33 40
6 16 21 28 36 41 48 15 22 27 35 42 47 13 19 26 40 46 5 12 14 25 34 39 7 11 1 20 33 45 3 10 24 30 37 44 2 9 18 23 32 43 4 8 17 29 31 38
7 18 24 29 34 40 45 17 23 30 33 39 46 12 22 28 38 43 6 11 16 27 32 37 5 13 15 21 31 44 4 9 20 25 42 48 3 8 14 19 36 47 2 10 1 26 35 41
8 31 43 37 1 25 19 32 44 38 14 26 20 2 45 39 27 21 9 3 33 40 15 28 10 4 34 46 16 22 11 5 47 41 29 23 12 6 35 48 17 24 13 7 36 42 18 30
9 33 46 39 17 30 23 34 45 40 18 29 24 4 48 42 25 20 10 2 35 41 1 26 8 3 36 47 14 19 12 7 43 38 28 22 13 5 31 44 15 21 11 6 32 37 16 27
10 35 47 42 15 27 22 36 48 41 16 28 21 3 44 37 30 24 8 4 31 38 17 29 9 2 32 43 18 23 13 6 46 40 26 19 11 7 33 45 1 20 12 5 34 39 14 25
11 32 44 38 14 26 20 31 43 37 1 25 19 5 47 41 29 23 13 7 36 42 18 30 12 6 35 48 17 24 8 2 45 39 27 21 10 4 34 46 16 22 9 3 33 40 15 28
12 34 45 40 18 29 24 33 46 39 17 30 23 7 43 38 28 22 11 6 32 37 16 27 13 5 31 44 15 21 9 4 48 42 25 20 8 3 36 47 14 19 10 2 35 41 1 26
13 36 48 41 16 28 21 35 47 42 15 27 22 6 46 40 26 19 12 5 34 39 14 25 11 7 33 45 1 20 10 3 44 37 30 24 9 2 32 43 18 23 8 4 31 38 17 29
14 5 7 6 2 4 3 11 13 12 8 10 9 1 18 17 16 15 20 19 23 24 21 22 26 25 29 30 27 28 32 31 36 35 34 33 38 37 41 42 39 40 44 43 47 48 45 46
15 3 4 2 6 7 5 10 8 9 13 11 12 16 17 18 1 14 22 21 24 23 19 20 27 28 30 29 26 25 35 36 31 32 33 34 42 41 37 38 40 39 47 48 44 43 46 45
16 6 5 7 3 2 4 13 12 11 10 9 8 15 14 1 18 17 21 22 19 20 24 23 28 27 26 25 30 29 36 35 34 33 32 31 41 42 40 39 37 38 48 47 46 45 44 43
17 4 2 3 7 5 6 9 10 8 12 13 11 18 1 14 15 16 23 24 20 19 22 21 30 29 25 26 28 27 33 34 35 36 31 32 39 40 42 41 38 37 46 45 48 47 43 44
18 7 6 5 4 3 2 12 11 13 9 8 10 17 16 15 14 1 24 23 22 21 20 19 29 30 28 27 25 26 34 33 32 31 36 35 40 39 38 37 42 41 45 46 43 44 48 47
19 21 28 16 41 48 36 27 15 22 47 35 42 26 40 46 6 13 25 14 39 34 5 12 1 20 45 33 11 7 37 44 3 10 24 30 43 32 2 9 23 18 31 38 8 4 29 17
20 23 30 17 39 46 33 29 18 24 45 34 40 25 42 48 4 9 26 1 41 35 2 10 14 19 47 36 8 3 38 43 7 12 22 28 44 31 5 13 21 15 32 37 11 6 27 16
21 19 25 1 37 43 31 26 14 20 44 32 38 27 39 45 2 8 28 15 40 33 3 9 16 22 46 34 10 4 41 47 5 11 23 29 48 35 6 12 24 17 36 42 13 7 30 18
22 24 29 18 40 45 34 30 17 23 46 33 39 28 38 43 7 12 27 16 37 32 6 11 15 21 44 31 13 5 42 48 4 9 20 25 47 36 3 8 19 14 35 41 10 2 26 1
23 20 26 14 38 44 32 25 1 19 43 31 37 29 41 47 5 11 30 18 42 36 7 13 17 24 48 35 12 6 39 45 2 8 21 27 46 34 4 10 22 16 33 40 9 3 28 15
24 22 27 15 42 47 35 28 16 21 48 36 41 30 37 44 3 10 29 17 38 31 4 8 18 23 43 32 9 2 40 46 6 13 19 26 45 33 7 11 20 1 34 39 12 5 25 14
25 39 33 46 23 17 30 45 40 34 29 24 18 20 9 4 48 42 1 26 2 10 41 35 19 14 8 3 47 36 43 38 28 22 12 7 31 44 21 15 5 13 37 32 27 16 11 6
26 41 36 48 21 16 28 47 42 35 27 22 15 19 13 6 46 40 14 25 5 12 39 34 20 1 11 7 45 33 44 37 30 24 10 3 32 43 23 18 2 9 38 31 29 17 8 4
27 37 31 43 19 1 25 44 38 32 26 20 14 21 8 2 45 39 15 28 3 9 40 33 22 16 10 4 46 34 47 41 29 23 11 5 35 48 24 17 6 12 42 36 30 18 13 7
28 40 34 45 24 18 29 46 39 33 30 23 17 22 12 7 43 38 16 27 6 11 37 32 21 15 13 5 44 31 48 42 25 20 9 4 36 47 19 14 3 8 41 35 26 1 10 2
29 38 32 44 20 14 26 43 37 31 25 19 1 23 11 5 47 41 18 30 7 13 42 36 24 17 12 6 48 35 45 39 27 21 8 2 34 46 22 16 4 10 40 33 28 15 9 3
30 42 35 47 22 15 27 48 41 36 28 21 16 24 10 3 44 37 17 29 4 8 38 31 23 18 9 2 43 32 46 40 26 19 13 6 33 45 20 1 7 11 39 34 25 14 12 5
31 8 9 10 11 12 13 2 3 4 5 6 7 32 33 34 35 36 43 44 45 46 47 48 37 38 39 40 41 42 1 14 15 16 17 18 25 26 27 28 29 30 19 20 21 22 23 24
32 11 13 12 8 10 9 5 7 6 2 4 3 31 36 35 34 33 44 43 47 48 45 46 38 37 41 42 39 40 14 1 18 17 16 15 26 25 29 30 27 28 20 19 23 24 21 22
33 9 10 8 12 13 11 4 2 3 7 5 6 34 35 36 31 32 46 45 48 47 43 44 39 40 42 41 38 37 17 18 1 14 15 16 30 29 25 26 28 27 23 24 20 19 22 21
34 12 11 13 9 8 10 7 6 5 4 3 2 33 32 31 36 35 45 46 43 44 48 47 40 39 38 37 42 41 18 17 16 15 14 1 29 30 28 27 25 26 24 23 22 21 20 19
35 10 8 9 13 11 12 3 4 2 6 7 5 36 31 32 33 34 47 48 44 43 46 45 42 41 37 38 40 39 15 16 17 18 1 14 27 28 30 29 26 25 22 21 24 23 19 20
36 13 12 11 10 9 8 6 5 7 3 2 4 35 34 33 32 31 48 47 46 45 44 43 41 42 40 39 37 38 16 15 14 1 18 17 28 27 26 25 30 29 21 22 19 20 24 23
37 27 15 22 47 35 42 21 28 16 41 48 36 44 3 10 24 30 31 38 8 4 29 17 43 32 2 9 23 18 19 26 40 46 6 13 1 20 45 33 11 7 25 14 39 34 5 12
38 29 18 24 45 34 40 23 30 17 39 46 33 43 7 12 22 28 32 37 11 6 27 16 44 31 5 13 21 15 20 25 42 48 4 9 14 19 47 36 8 3 26 1 41 35 2 10
39 25 1 19 43 31 37 20 26 14 38 44 32 45 2 8 21 27 33 40 9 3 28 15 46 34 4 10 22 16 23 29 41 47 5 11 17 24 48 35 12 6 30 18 42 36 7 13
40 28 16 21 48 36 41 22 27 15 42 47 35 46 6 13 19 26 34 39 12 5 25 14 45 33 7 11 20 1 24 30 37 44 3 10 18 23 43 32 9 2 29 17 38 31 4 8
41 26 14 20 44 32 38 19 25 1 37 43 31 47 5 11 23 29 36 42 13 7 30 18 48 35 6 12 24 17 21 27 39 45 2 8 16 22 46 34 10 4 28 15 40 33 3 9
42 30 17 23 46 33 39 24 29 18 40 45 34 48 4 9 20 25 35 41 10 2 26 1 47 36 3 8 19 14 22 28 38 43 7 12 15 21 44 31 13 5 27 16 37 32 6 11
43 45 40 34 29 24 18 39 33 46 23 17 30 38 28 22 12 7 37 32 27 16 11 6 31 44 21 15 5 13 25 20 9 4 48 42 19 14 8 3 47 36 1 26 2 10 41 35
44 47 42 35 27 22 15 41 36 48 21 16 28 37 30 24 10 3 38 31 29 17 8 4 32 43 23 18 2 9 26 19 13 6 46 40 20 1 11 7 45 33 14 25 5 12 39 34
45 43 37 31 25 19 1 38 32 44 20 14 26 39 27 21 8 2 40 33 28 15 9 3 34 46 22 16 4 10 29 23 11 5 47 41 24 17 12 6 48 35 18 30 7 13 42 36
46 48 41 36 28 21 16 42 35 47 22 15 27 40 26 19 13 6 39 34 25 14 12 5 33 45 20 1 7 11 30 24 10 3 44 37 23 18 9 2 43 32 17 29 4 8 38 31
47 44 38 32 26 20 14 37 31 43 19 1 25 41 29 23 11 5 42 36 30 18 13 7 35 48 24 17 6 12 27 21 8 2 45 39 22 16 10 4 46 34 15 28 3 9 40 33
48 46 39 33 30 23 17 40 34 45 24 18 29 42 25 20 9 4 41 35 26 1 10 2 36 47 19 14 3 8 28 22 12 7 43 38 21 15 13 5 44 31 16 27 6 11 37 32

#include<stdio.h>
#include<string.h>
#include<vector>
using namespace std;

// 位操作
enum IsGroupEnum
{
    IsGroup_None=0,//不是羣
    IsGroup_bG=0x00000001,//是羣
    IsGroup_bC=0x00000002,//循環羣
    IsGroup_bA=0x00000004,//交換羣
    IsGroup_bN=0x00000008,//冪零羣
    IsGroup_bS=0x00000010,//可解羣
};

struct IGroup
{
public:
   virtual void printSet()=0; 
   virtual void printTable()=0;    
   virtual int mul(int a,int b)=0;
   virtual int size()=0;
   virtual int inv(int a)=0;    
};

void printGroup(IGroup* g){
   int n=g->size();  
   for(int i=0;i<n;i++){
       for(int j=0;j<n;j++){
          int ij=g->mul(i,j);
          printf("%d ",ij+1); 
       }
       printf("\n");
   }
}

int getidx(int *Arr2,int n,int m,int *Arr1){
    for(int i=0;i<n;i++){
        if(memcmp(Arr2+m*i,Arr1,m*sizeof(int))==0){
            return i;    
        }
    }
    return -1;    
}

int getidx(vector<vector<int> > &Arr2,vector<int> &Arr1){
    int n=Arr2.size();
    int m=Arr1.size();    
    for(int i=0;i<n;i++){
        int ni=Arr2[i].size();
        if(ni!=m)
            return -1;
        if(memcmp(&Arr2[i][0],&Arr1[0],m*sizeof(int))==0){
            return i;    
        }
    }
    return -1;    
}

/* ======================= Engin of function inverse_mod_p ======================= */

int mod( int n, int p )
{
register int raw_mod ;      /*  The value n % p computed by C's mod function.  */
raw_mod = n % p ;
if (raw_mod == 0)
    return( 0 ) ;
else if (n >= 0)             /*  mod is not 0.  n >= 0. */
    return( raw_mod ) ;
else
    return( raw_mod + p ) ;  /* mod is not 0.  n < 0. */

int inverse_mod_p( int u, int p )
{
    int t1 = 0 ;
    int t3 = 0 ;
    int q  = 0 ;
    int u1 = 1 ;
    int u3 = u ;
    int v1 = 0 ;
    int v3 = p ;
    int inv_v = 0 ;

    while( v3 != 0)
    {
        q = (int)(u3 / v3) ;
        t1 = u1 - v1 * q ;
        t3 = u3 - v3 * q ;
        u1 = v1 ;
        u3 = v3 ;
        v1 = t1 ;
        v3 = t3 ;
    }
    inv_v = mod( u1, p ) ;
    if ( mod( u * inv_v, p ) != 1)return 0 ;
    return inv_v ;
}
/* ======================= End of function inverse_mod_p ======================= */

struct E8:public IGroup
{
public:
   static int s_Arr[][3];
public:
   virtual void printSet();
   virtual void printTable();     
   virtual int mul(int a,int b);
   virtual int size();
   virtual int inv(int a);
};

int E8::s_Arr[][3]={ \
    {0,0,0}, \
    {1,1,1}, \
    {0,0,1}, \
    {0,1,0}, \
    {0,1,1}, \
    {1,0,0}, \
    {1,0,1}, \
    {1,1,0}, \
};

void E8::printSet()
{
    printf("GAP[8,5]=E_8:\n");
    for(int i=0;i<8;i++){
        int i1=inv(i);
        int *pi1=s_Arr[i1];
        printf("%d->[%d,%d,%d]=>%d->[%d,%d,%d]\n",i,s_Arr[i][0],s_Arr[i][1],s_Arr[i][2],i1,pi1[0],pi1[1],pi1[2]);
    }
}

void E8::printTable()
{
   printf("GAP[8,5]=E_8:\n");
   printGroup(this);
}     

int E8::mul(int a,int b)
{
    int ret[]={0,0,0};
    int *A=s_Arr[a];
    int *B=s_Arr[b];
    for(int i=0;i<3;i++){    
        ret[i]=(A[i])^(B[i]);
        //ret[i]=((*(A+i))+(*(B+i)))%2;
    }
    int n=size();
    int idx=getidx(&s_Arr[0][0],n,3,&ret[0]);
    return idx;    
}

int E8::size()
{
    //int n=sizeof(s_Arr)/sizeof(s_Arr[0]);
    return 8;    
}

int E8::inv(int a)
{
    int ret[]={0,0,0};
    int *A=s_Arr[a];
    for(int i=0;i<3;i++){    
        ret[i]=(2-*(A+i))%2;
    }
    int n=size();
    int idx=getidx(&s_Arr[0][0],n,3,&ret[0]);
    return idx;
}

// GL(2,n)
struct GL2Zn:public IGroup
{
public:
   //  靜態函數
   static vector<int> mul(const vector<int> &t,const vector<int> &m,int n);  
   static vector<int> inv(const vector<int> &t,int n);   
   static int det(const vector<int> &t,int n);  
public:
   // 實現抽象基類的方法
   virtual void printSet();
   virtual void printTable();     
   virtual int mul(int a,int b);
   virtual int size();
   virtual int inv(int a);
   // 構造函數
   GL2Zn(int n);
   // 成員函數
   // 成員變量
   vector<vector<int> > s_Arr;   
   int m_n;   
};

GL2Zn::GL2Zn(int n)
{
    m_n=n;
    vector<int> v(4);
    v[0]=1;
    v[1]=0;
    v[2]=0;
    v[3]=1;
    s_Arr.push_back(v);
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)    
            for(int k=0;k<n;k++)
                for(int m=0;m<n;m++)
                {
                    if(i==1 && j==0 && k==0 && m==1)
                        continue;
                    v[0]=i;
                    v[1]=j;
                    v[2]=k;
                    v[3]=m;
                    int d=det(v,n);
                    // 非奇異2階方陣
                    if(d!=0)
                        s_Arr.push_back(v);                        
                }
}

void GL2Zn::printSet()
{
    printf("%d階羣GL(2,%d):\n",size(),m_n);
    for(int i=0;i<size();i++){
        vector<int> v1=inv(s_Arr[i],m_n);
        int i1=getidx(s_Arr,v1);
        printf("%d->[[%d,%d],[%d,%d]]=>%d->[[%d,%d],[%d,%d]]\n",i,s_Arr[i][0],s_Arr[i][1],s_Arr[i][2],s_Arr[i][3],i1,v1[0],v1[1],v1[2],v1[3]);
    }
}

void GL2Zn::printTable()
{
   printf("%d階羣GL(2,%d):\n",size(),m_n);
   printGroup(this);
}

int GL2Zn::mul(int a,int b)
{
    vector<int> A=s_Arr[a];
    vector<int> B=s_Arr[b];
    vector<int> C=mul(A,B,m_n);
    int idx=getidx(s_Arr,C);
    return idx;
}

int GL2Zn::inv(int a)
{
    vector<int> v=inv(s_Arr[a],m_n);
    int idx=getidx(s_Arr,v);
    return idx;
}

int GL2Zn::size()
{
    return s_Arr.size();    
}

vector<int> GL2Zn::mul(const vector<int> &t,const vector<int> &m,int n)
{
    vector<int> v(4);
    v[0]=t[0] * m[0]+t[1] * m[2];
    v[1]=t[0] * m[1]+t[1] * m[3];
    v[2]=t[2] * m[0]+t[3] * m[2];    
    v[3]=t[2] * m[1]+t[3] * m[3];
    if(n>0){
        for(int i=0;i<4;i++){
            v[i]=mod(v[i],n);
        }
    }    
    return v;
}

int GL2Zn::det(const vector<int> &t,int n)
{
    int ret=t[0]*t[3]-t[1]*t[2];
    if(n>0){
        ret=mod(ret,n);
    }
    return ret;
}

vector<int> GL2Zn::inv(const vector<int> &t,int n)
{
    vector<int> v(4,0);
    int d=det(t,n);
    if(d==0)
        return v;
    int d1=inverse_mod_p(d,n);
    if(d1==0)
        return v;
    v[0]=t[3]*d1;
    v[1]=-t[1]*d1;
    v[2]=-t[2]*d1;
    v[3]=t[0]*d1;
    if(n>0){
        for(int i=0;i<4;i++){
            v[i]=mod(v[i],n);
        }
    }    
    return v;    
}

int main(){
    
    E8 e8;
    e8.printSet();    
    e8.printTable();
    
    GL2Zn gl2Z2(2);
    gl2Z2.printSet();
    gl2Z2.printTable();
    
    GL2Zn gl2Z3(3);
    gl2Z3.printSet();        
    gl2Z3.printTable();    
    
    return 0;
}

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