(MAGMA)/*示例n:=6*/
n: =6;
n、 //年n: 交叉口数量
G: =Sym(2*n);
doubleG:=Sym(4*n);
genH:={};
对于[1..(n-1)]中的j,做v:=G!(1,2*j+1)(2,2*j+2);包括(~genH,v);结束;
H:=置换组<2*n|genH>;//S(2n)的H=S(n)子群
卡片H:=#H;
cardH;
rho:=恒等式(G);对于[0..(n-1)]中的j,请执行v:=G!(2*j+1,2*j+2);ρ:=ρ*v;结束;
cycrho:=置换组<2*n|{rho}>;//由rho(镜像)生成的循环子群Z2
Hcycrho:=sub<G|[H,cycrho]>;//由H和cycrho生成的子组
cardZp:=阶乘(2*n-1);
β:=G!追加([2..2*n],1);//一种典型的圆形排列
Cbeta:=扶正器(G,beta);
bool,rever:=Is共轭(G,beta,beta^(-1));
cycbeta:=置换组<2*n|{rever}>;
Cbetarev:=sub<G|[Cbeta,cycbeta]>;
psifct:=函数(每个);
perinv:=每^(-1);
res:=[1..2*n]]中的[IsOdd(j)select(j+1)^per else j-1+2*n:j;
resbis:=[IsOdd((j-2*n)^periv)select(j-2*n)^perv+1+2*n else((j-2-*n)*perinv-1)^per:j in[2*n+1..4*n]];
res类别:=resbis;
返回双G!物件;
端函数;
循环数:=函数(per);ess:=循环结构(per);return&+[ess[i,2]:i in[1..#ess]];端函数;
超循环数:=函数(per);返回循环数(psifct(per));端函数;
//结果以列表genuslist(n+2-2g)^^多重性给出,其中g是亏格
//案例UO
dbl,dblsize:=双CosetRepresentatives(G,H,Cbetarev)#dblsize;
genuslist:=1..#dblsize]*}中的{*超循环数(beta^(dbl[j]^(-1)):j;genuslist;
退出;