码迷,mamicode.com
首页 > 其他好文 > 详细

p^3阶有限环序列以及R27的编号

时间:2020-06-08 00:38:21      阅读:47      评论:0      收藏:0      [点我收藏+]

标签:mod   make   efi   position   vector   sort   tin   sprintf   too   

gap> calT(27);
4
1~4:G27_1=C27,N0=1,2,6,18,
5~24:G27_2=C9 x C3,N0=1,8,18,0,
25~59:G27_5=C3 x C3 x C3,N0=1,26,0,0,

D:\MathTool\gaptool>Rppp
Rppp(1,2)=R8_1,Rppp(1,3)=R27_1
Rppp(2,2)=R8_2,Rppp(2,3)=R27_2
Rppp(3,2)=R8_3,Rppp(3,3)=R27_3
Rppp(4,2)=R8_4,Rppp(4,3)=R27_4
Rppp(5,2)=R8_5,Rppp(5,3)=R27_5
Rppp(8,2)=R8_8,Rppp(8,3)=R27_8
Rppp(10,2)=R8_10,Rppp(10,3)=R27_10
Rppp(11,2)=R8_11,Rppp(11,3)=R27_11
Rppp(13,2)=R8_13,Rppp(13,3)=R27_13
Rppp(15,2)=R8_15,Rppp(15,3)=R27_15
Rppp(16,2)=R8_16,Rppp(16,3)=R27_16
Rppp(19,2)=R8_19,Rppp(19,3)=R27_19
Rppp(20,2)=R8_20,Rppp(20,3)=R27_20
Rppp(21,2)=R8_21,Rppp(21,3)=R27_21
Rppp(23,2)=R8_23,Rppp(23,3)=R27_23
Rppp(24,2)=R8_24,Rppp(24,3)=R27_24
Rppp(25,2)=R8_25,Rppp(25,3)=R27_25
Rppp(26,2)=R8_26,Rppp(26,3)=R27_26
Rppp(28,2)=R8_28,Rppp(28,3)=R27_28
Rppp(29,2)=R8_29,Rppp(29,3)=R27_49
Rppp(30,2)=R8_30,Rppp(30,3)=R27_30
Rppp(33,2)=R8_33,Rppp(33,3)=R27_33
Rppp(34,2)=R8_34,Rppp(34,3)=R27_49
Rppp(37,2)=R8_37,Rppp(37,3)=R27_37
Rppp(38,2)=R8_38,Rppp(38,3)=R27_38
Rppp(41,2)=R8_41,Rppp(41,3)=R27_41
Rppp(43,2)=R8_43,Rppp(43,3)=R27_43
Rppp(44,2)=R8_44,Rppp(44,3)=R27_44
Rppp(45,2)=R8_45,Rppp(45,3)=R27_49
Rppp(46,2)=R8_46,Rppp(46,3)=R27_48
Rppp(47,2)=R8_47,Rppp(47,3)=R27_47
Rppp(48,2)=R8_48,Rppp(48,3)=R27_48
Rppp(49,2)=R8_49,Rppp(49,3)=R27_49
Rppp(50,2)=R8_50,Rppp(50,3)=R27_50
Rppp(51,2)=R8_51,Rppp(51,3)=R27_51

D:\MathTool\gaptool>Rppp
R8_1:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,1,2,4],8,1,0,8,1,7,7,64,7,8,[1,1,2,4],[]
I1I2=[[1,1,1],[2,1,1],[4,1,2]],[[2,1,1],[4,1,5]]
R27_1:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,2,6,18],27,1,0,27,1,26,26,729,26,27,[1,2,6,18],[]
I1I2=[[1,1,1],[3,1,2],[9,1,6]],[[3,1,3],[9,1,33]]
R8_2:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,1,2,4],8,1,0,8,1,3,3,32,7,8,[1,1,2,4],[[4,8,8],[8,4,8],[8,8,16]]
I1I2=[[1,1,1],[2,1,1],[4,1,2]],[[2,1,1],[4,1,5]]
R27_2:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,2,6,18],27,1,0,27,1,8,8,189,26,27,[1,2,6,18],[[9,27,108],[27,9,108],[27,27,324]]
I1I2=[[1,1,1],[3,1,2],[9,1,6]],[[3,1,3],[9,1,33]]
R8_3:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,1,2,4],8,1,1,4,2,1,3,20,3,8,[1,1,2,4],[[2,8,4],[4,4,4],[4,8,8],[8,2,4],[8,4,8],[8,8,16]]
I1I2=[[1,1,1],[2,1,1],[4,2,2]],[[2,1,1],[4,2,5]]
R27_3:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,2,6,18],27,1,1,9,2,2,8,81,8,27,[1,2,6,18],[[3,27,36],[9,9,36],[9,27,108],[27,3,36],[27,9,108],[27,27,324]]
I1I2=[[1,1,1],[3,1,2],[9,3,6]],[[3,1,3],[9,3,33]]
R8_4:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,1,2,4],8,1,0,8,1,3,7,48,7,8,[1,1,2,4],[[8,8,16]]
I1I2=[[1,1,1],[2,1,1],[4,1,2]],[[2,1,1],[4,1,5]]
R27_4:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,2,6,18],27,1,0,27,1,8,26,405,26,27,[1,2,6,18],[[27,27,324]]
I1I2=[[1,1,1],[3,1,2],[9,1,6]],[[3,1,3],[9,1,33]]
R8_5:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,3,4,0],4,1,0,8,1,7,7,64,7,8,[1,3,4,0],[]
I1I2=[[1,1,1],[2,1,3],[4,1,4]],[[2,1,3],[4,1,10],[4,4,3]]
R27_5:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,8,18,0],9,1,0,27,1,26,26,729,26,27,[1,8,18,0],[]
I1I2=[[1,1,1],[3,1,8],[9,1,18]],[[3,1,12],[9,1,99],[9,4,24]]
R8_8:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,3,4,0],4,0,0,8,1,5,7,48,7,2,[1,3,4,0],[[2,4,8],[4,4,8]]
I1I2=[[1,1,1],[2,1,3],[4,1,2],[4,2,2]],[[2,1,3],[4,1,5],[4,2,5],[4,4,3]]
R27_8:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,8,18,0],9,0,0,27,1,14,26,405,26,3,[1,8,18,0],[[3,9,108],[9,9,216]]
I1I2=[[1,1,1],[3,1,8],[9,1,6],[9,3,12]],[[3,1,12],[9,1,33],[9,3,66],[9,4,24]]
R8_10:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,3,4,0],4,0,0,8,1,5,7,48,7,2,[1,3,4,0],[[4,2,8],[4,4,8]]
I1I2=[[1,1,1],[2,1,3],[4,1,2],[4,2,2]],[[2,1,3],[4,1,5],[4,2,5],[4,4,3]]
R27_10:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,8,18,0],9,0,0,27,1,14,26,405,26,3,[1,8,18,0],[[9,3,108],[9,9,216]]
I1I2=[[1,1,1],[3,1,8],[9,1,6],[9,3,12]],[[3,1,12],[9,1,33],[9,3,66],[9,4,24]]
R8_11:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,3,4,0],4,1,0,8,1,7,7,40,7,8,[1,3,4,0],[[2,4,8],[4,2,8],[4,4,8]]
I1I2=[[1,1,1],[2,1,3],[4,1,4]],[[2,1,3],[4,1,10],[4,4,3]]
R27_11:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,8,18,0],9,1,0,27,1,14,26,297,26,27,[1,8,18,0],[[3,9,108],[9,3,108],[9,9,216]]
I1I2=[[1,1,1],[3,1,8],[9,1,6],[9,3,12]],[[3,1,12],[9,1,33],[9,3,66],[9,4,24]]
R8_13:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,3,4,0],4,1,0,8,2,3,3,32,7,8,[1,3,2,2],[[2,4,8],[4,2,8],[4,4,16]]
I1I2=[[1,1,1],[2,1,3],[4,3,2]],[[2,1,3],[4,3,5],[4,4,3]]
R27_13:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,8,18,0],9,1,0,27,2,8,8,189,26,27,[1,8,6,12],[[3,9,108],[9,3,108],[9,9,324]]
I1I2=[[1,1,1],[3,1,8],[9,2,6]],[[3,1,12],[9,2,33],[9,4,24]]
R8_15:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,3,4,0],4,0,0,8,3,3,3,28,7,2,[1,3,4,0],[[2,4,12],[4,2,8],[4,4,16]]
I1I2=[[1,1,1],[2,1,3],[4,3,4]],[[2,1,3],[4,3,10],[4,4,3]]
R27_15:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,8,18,0],9,0,0,27,4,8,8,153,26,3,[1,8,18,0],[[3,9,144],[9,3,108],[9,9,324]]
I1I2=[[1,1,1],[3,1,8],[9,2,18]],[[3,1,12],[9,2,99],[9,4,24]]
R8_16:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,3,4,0],4,1,0,8,1,3,7,48,7,8,[1,3,4,0],[[4,4,16]]
I1I2=[[1,1,1],[2,1,3],[4,2,4]],[[2,1,3],[4,2,10],[4,4,3]]
R27_16:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,8,18,0],9,1,0,27,1,8,26,405,26,27,[1,8,18,0],[[9,9,324]]
I1I2=[[1,1,1],[3,1,8],[9,3,18]],[[3,1,12],[9,3,99],[9,4,24]]
R8_19:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,3,4,0],4,1,0,8,1,3,7,40,7,8,[1,3,4,0],[[2,4,8],[4,2,8],[4,4,8]]
I1I2=[[1,1,1],[2,1,3],[4,2,4]],[[2,1,3],[4,2,10],[4,4,3]]
R27_19:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,8,18,0],9,0,0,27,1,8,26,297,26,3,[1,8,18,0],[[3,9,108],[9,3,108],[9,9,216]]
I1I2=[[1,1,1],[3,1,8],[9,3,18]],[[3,1,12],[9,3,99],[9,4,24]]
R8_20:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,3,4,0],4,0,0,8,3,3,3,28,3,2,[1,3,4,0],[[2,4,8],[4,2,12],[4,4,16]]
I1I2=[[1,1,1],[2,1,3],[4,3,4]],[[2,1,3],[4,3,10],[4,4,3]]
R27_20:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,8,18,0],9,0,0,27,4,8,8,153,8,3,[1,8,18,0],[[3,9,108],[9,3,144],[9,9,324]]
I1I2=[[1,1,1],[3,1,8],[9,2,18]],[[3,1,12],[9,2,99],[9,4,24]]
R8_21:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,3,4,0],4,1,1,4,2,3,3,24,3,8,[1,3,2,2],[[2,4,12],[4,2,12],[4,4,16]]
I1I2=[[1,1,1],[2,1,3],[4,3,2]],[[2,1,3],[4,3,5],[4,4,3]]
R27_21:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,8,18,0],9,1,1,9,2,8,8,117,8,27,[1,8,6,12],[[3,9,144],[9,3,144],[9,9,324]]
I1I2=[[1,1,1],[3,1,8],[9,2,6]],[[3,1,12],[9,2,33],[9,4,24]]
R8_23:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,3,4,0],4,1,0,8,1,3,7,48,7,8,[1,3,0,4],[[4,4,16]]
I1I2=[[1,1,1],[2,1,3]],[[2,1,3],[4,4,3]]
R27_23:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,8,18,0],9,1,0,27,1,8,26,405,26,27,[1,8,0,18],[[9,9,324]]
I1I2=[[1,1,1],[3,1,8]],[[3,1,12],[9,4,24]]
R8_24:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,3,4,0],4,1,0,8,1,3,3,32,7,8,[1,3,0,4],[[2,4,8],[4,2,8],[4,4,16]]
I1I2=[[1,1,1],[2,1,3]],[[2,1,3],[4,4,3]]
R27_24:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,8,18,0],9,1,0,27,1,8,8,189,26,27,[1,8,0,18],[[3,9,108],[9,3,108],[9,9,324]]
I1I2=[[1,1,1],[3,1,8]],[[3,1,12],[9,4,24]]
R8_25:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,7,0,0],2,1,0,8,1,7,7,64,7,8,[1,7,0,0],[]
I1I2=[[1,1,1],[2,1,7]],[[2,1,7],[4,4,21]]
R27_25:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,26,0,0],3,1,0,27,1,26,26,729,26,27,[1,26,0,0],[]
I1I2=[[1,1,1],[3,1,26]],[[3,1,39],[9,4,312]]
R8_26:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,7,0,0],2,1,0,8,1,3,7,48,7,8,[1,3,4,0],[[2,2,16]]
I1I2=[[1,1,1],[2,1,3],[4,5,4]],[[2,1,3],[4,4,3],[4,5,10]]
R27_26:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,26,0,0],3,0,0,27,4,8,8,297,26,3,[1,14,12,0],[[3,3,432]]
I1I2=[[1,1,1],[3,1,8],[3,2,6],[9,6,12]],[[3,1,12],[3,2,9],[9,4,24],[9,6,90],[9,7,24]]
R8_28:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,7,0,0],2,0,0,8,1,5,7,48,7,2,[1,5,2,0],[[2,2,16]]
I1I2=[[1,1,1],[2,1,5],[4,5,2]],[[2,1,5],[4,4,6],[4,5,5]]
R27_28:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,26,0,0],3,0,0,27,4,8,8,297,26,3,[1,14,12,0],[[3,3,432]]
I1I2=[[1,1,1],[3,1,8],[3,2,6],[9,6,12]],[[3,1,12],[3,2,9],[9,4,24],[9,6,90],[9,8,24]]
R8_29:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,7,0,0],2,0,0,8,3,3,3,40,7,2,[1,5,2,0],[[2,2,24]]
I1I2=[[1,1,1],[2,1,3],[2,2,2],[4,6,2]],[[2,1,3],[2,2,2],[4,4,3],[4,6,8],[4,7,3]]
R27_49:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,26,0,0],3,0,1,15,8,2,2,129,14,3,[1,16,10,0],[[3,3,600]]
I1I2=[[1,1,1],[3,1,2],[3,2,14],[9,9,4],[9,10,6]],[[3,1,3],[3,2,21],[9,7,24],[9,8,24],[9,9,30],[9,10,81]]
R8_30:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,7,0,0],2,0,0,8,5,3,3,36,3,1,[1,7,0,0],[[2,2,28]]
I1I2=[[1,1,1],[2,1,3],[2,2,4]],[[2,1,3],[2,2,4],[4,4,3],[4,7,18]]
R27_30:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,26,0,0],3,0,0,27,10,8,8,261,8,1,[1,26,0,0],[[3,3,468]]
I1I2=[[1,1,1],[3,1,8],[3,2,18]],[[3,1,12],[3,2,27],[9,4,24],[9,7,288]]
R8_33:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,7,0,0],2,1,0,8,1,3,3,32,7,8,[1,3,0,4],[[2,2,32]]
I1I2=[[1,1,1],[2,1,3]],[[2,1,3],[4,4,3]]
R27_33:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,26,0,0],3,1,0,27,2,2,8,225,26,27,[1,4,10,12],[[3,3,504]]
I1I2=[[1,1,1],[3,1,2],[3,2,2],[9,5,6],[9,6,4]],[[3,1,3],[3,2,3],[9,5,33],[9,6,30]]
R8_34:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,7,0,0],2,0,0,8,3,3,3,40,7,2,[1,5,2,0],[[2,2,24]]
I1I2=[[1,1,1],[2,1,3],[2,2,2],[4,6,2]],[[2,1,3],[2,2,2],[4,4,3],[4,6,8],[4,8,3]]
R27_49:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,26,0,0],3,0,1,15,8,2,2,129,14,3,[1,16,10,0],[[3,3,600]]
I1I2=[[1,1,1],[3,1,2],[3,2,14],[9,9,4],[9,10,6]],[[3,1,3],[3,2,21],[9,7,24],[9,8,24],[9,9,30],[9,10,81]]
R8_37:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,7,0,0],2,0,0,8,3,3,3,28,3,2,[1,5,2,0],[[2,2,36]]
I1I2=[[1,1,1],[2,1,3],[2,2,2],[4,9,2]],[[2,1,3],[2,2,2],[4,4,3],[4,7,3],[4,9,8]]
R27_37:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,26,0,0],3,0,0,27,4,8,8,153,8,3,[1,14,12,0],[[3,3,576]]
I1I2=[[1,1,1],[3,1,8],[3,2,6],[9,9,12]],[[3,1,12],[3,2,9],[9,4,24],[9,7,24],[9,9,90]]
R8_38:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,7,0,0],2,1,0,8,2,1,3,36,7,8,[1,2,3,2],[[2,2,28]]
I1I2=[[1,1,1],[2,1,1],[2,2,1],[4,5,2],[4,6,1]],[[2,1,1],[2,2,1],[4,5,5],[4,6,4]]
R27_38:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,26,0,0],3,1,0,27,4,2,2,225,26,27,[1,8,14,4],[[3,3,504]]
I1I2=[[1,1,1],[3,1,2],[3,2,6],[9,6,12],[9,10,2]],[[3,1,3],[3,2,9],[9,6,90],[9,10,27]]
R8_41:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,7,0,0],2,0,0,8,6,1,1,30,5,2,[1,6,1,0],[[2,2,34]]
I1I2=[[1,1,1],[2,1,1],[2,2,5],[4,6,1]],[[2,1,1],[2,2,5],[4,6,4],[4,7,6],[4,10,6]]
R27_41:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,26,0,0],3,0,0,27,8,2,2,165,14,3,[1,16,10,0],[[3,3,564]]
I1I2=[[1,1,1],[3,1,2],[3,2,14],[9,6,4],[9,10,6]],[[3,1,3],[3,2,21],[9,6,30],[9,7,48],[9,10,81]]
R8_43:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,7,0,0],2,0,0,8,5,3,3,36,7,1,[1,7,0,0],[[2,2,28]]
I1I2=[[1,1,1],[2,1,3],[2,2,4]],[[2,1,3],[2,2,4],[4,4,3],[4,8,18]]
R27_43:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,26,0,0],3,0,0,27,10,8,8,261,26,1,[1,26,0,0],[[3,3,468]]
I1I2=[[1,1,1],[3,1,8],[3,2,18]],[[3,1,12],[3,2,27],[9,4,24],[9,8,288]]
R8_44:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,7,0,0],2,0,0,8,3,3,3,28,7,2,[1,5,2,0],[[2,2,36]]
I1I2=[[1,1,1],[2,1,3],[2,2,2],[4,9,2]],[[2,1,3],[2,2,2],[4,4,3],[4,8,3],[4,9,8]]
R27_44:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,26,0,0],3,0,0,27,4,8,8,153,26,3,[1,14,12,0],[[3,3,576]]
I1I2=[[1,1,1],[3,1,8],[3,2,6],[9,9,12]],[[3,1,12],[3,2,9],[9,4,24],[9,8,24],[9,9,90]]
R8_45:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,7,0,0],2,1,1,4,2,3,3,24,3,8,[1,4,3,0],[[2,2,40]]
I1I2=[[1,1,1],[2,1,3],[2,2,1],[4,9,3]],[[2,1,3],[2,2,1],[4,4,3],[4,9,12]]
R27_49:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,26,0,0],3,0,1,15,8,2,2,129,14,3,[1,16,10,0],[[3,3,600]]
I1I2=[[1,1,1],[3,1,2],[3,2,14],[9,9,4],[9,10,6]],[[3,1,3],[3,2,21],[9,7,24],[9,8,24],[9,9,30],[9,10,81]]
R8_46:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,7,0,0],2,1,1,4,2,1,3,20,3,8,[1,2,3,2],[[2,2,44]]
I1I2=[[1,1,1],[2,1,1],[2,2,1],[4,5,2],[4,9,1]],[[2,1,1],[2,2,1],[4,5,5],[4,9,4]]
R27_48:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,26,0,0],3,1,1,15,4,2,2,105,14,27,[1,8,14,4],[[3,3,624]]
I1I2=[[1,1,1],[3,1,2],[3,2,6],[9,6,4],[9,9,8],[9,10,2]],[[3,1,3],[3,2,9],[9,6,30],[9,9,60],[9,10,27]]
R8_47:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,7,0,0],2,0,0,8,6,1,1,30,7,2,[1,6,1,0],[[2,2,34]]
I1I2=[[1,1,1],[2,1,1],[2,2,5],[4,6,1]],[[2,1,1],[2,2,5],[4,6,4],[4,8,6],[4,10,6]]
R27_47:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,26,0,0],3,0,0,27,8,2,2,165,26,3,[1,16,10,0],[[3,3,564]]
I1I2=[[1,1,1],[3,1,2],[3,2,14],[9,6,4],[9,10,6]],[[3,1,3],[3,2,21],[9,6,30],[9,8,48],[9,10,81]]
R8_48:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,7,0,0],2,1,1,6,4,1,1,24,5,8,[1,4,3,0],[[2,2,40]]
I1I2=[[1,1,1],[2,1,1],[2,2,3],[4,6,1],[4,9,2]],[[2,1,1],[2,2,3],[4,6,4],[4,9,8],[4,10,3]]
R27_48:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,26,0,0],3,1,1,15,4,2,2,105,14,27,[1,8,14,4],[[3,3,624]]
I1I2=[[1,1,1],[3,1,2],[3,2,6],[9,6,4],[9,9,8],[9,10,2]],[[3,1,3],[3,2,9],[9,6,30],[9,9,60],[9,10,27]]
R8_49:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,7,0,0],2,0,1,6,6,1,1,26,5,2,[1,6,1,0],[[2,2,38]]
I1I2=[[1,1,1],[2,1,1],[2,2,5],[4,9,1]],[[2,1,1],[2,2,5],[4,7,3],[4,8,3],[4,9,4],[4,10,6]]
R27_49:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,26,0,0],3,0,1,15,8,2,2,129,14,3,[1,16,10,0],[[3,3,600]]
I1I2=[[1,1,1],[3,1,2],[3,2,14],[9,9,4],[9,10,6]],[[3,1,3],[3,2,21],[9,7,24],[9,8,24],[9,9,30],[9,10,81]]
R8_50:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,7,0,0],2,1,1,7,8,0,0,27,6,8,[1,7,0,0],[[2,2,37]]
I1I2=[[1,1,1],[2,2,7]],[[2,2,7],[4,10,18]]
R27_50:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,26,0,0],3,1,1,19,8,0,0,125,18,27,[1,14,12,0],[[3,3,604]]
I1I2=[[1,1,1],[3,2,14],[9,10,12]],[[3,2,21],[9,10,162]]
R8_51:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,7,0,0],2,1,1,5,4,0,0,21,4,8,[1,3,2,2],[[2,2,43]]
I1I2=[[1,1,1],[2,2,3],[4,11,2]],[[2,2,3],[4,10,3],[4,11,5]]
R27_51:N0n0bAbOn1n2n4n5n6n7n8S1N2=[1,26,0,0],3,1,1,11,4,0,0,85,10,27,[1,6,8,12],[[3,3,644]]
I1I2=[[1,1,1],[3,2,6],[9,10,2],[9,11,6]],[[3,2,9],[9,10,27],[9,11,33]]

//#include"IRing.h"
#include<set>
#include"DecompositionRing.h"
#include"Rn.h"
#include"M2r.h"
#include"Mnr.h"
#include"PolynomialRing.h"
#include <ctime>
#include <fstream>

extern IRing* newRppp(int ID,int p=2,int sID=0);

string calcI2a(IRing* r){
    int IdRing(IRing* r);
    int n=r->size();
    vector<pair<int,int> > v;
   for(int i=0;i<n-1;i++){
       int j=i+1;
           vector<int> vi;
           vi.push_back(i);
           vi.push_back(j);           
           Subring si(r,vi);
           int ni=si.size();
           if(ni<n && ni>0){
            int ID=IdRing(&si);
#if 1            
            if(ID==-1 && ni==16){
                printf("i=%d,j=%d\n",i,j);
                break;
            }
#endif
            v.push_back(make_pair(ni,ID));
           }
   }
    std::sort(v.begin(),v.end());
    vector<tuple<int,int,int> > v1=doN2Vec(v);
    string str="[";
    for(int i=0;i<v1.size();i++)
    {
        char sz[200]={0};
        sprintf(sz,"[%d,%d,%d],",get<0>(v1[i]),get<1>(v1[i]),get<2>(v1[i]));
        str+=sz;
    }
    if(str.size()>2)
    {
        str=str.substr(0,str.size()-1);
    }
    str+="]";
    return str;
}

void findsubring(M2r *r,int n)
{
#define PRINT_LOG 1    
    bool bFind=false;    
#if PRINT_LOG
    char sz[100]="0";
    sprintf(sz,"R%d_%d.txt",r->size(),time(NULL));
    ofstream fout(sz);
#endif    
    string strCmd="del ";
    strCmd+=sz;    
    for(int i=0;i<r->size()-1;i++)
    for(int j=i+1;j<r->size();j++)
    {
        //int j=i+1;
        vector<int> v;
        v.push_back(i);
        v.push_back(j);        
        Subring S1i(r,v);
        int ni=S1i.size();
        if(n>0 && ni!=n && ni!=8)
            continue;
        int ID=IdRing(&S1i);
        if(n<r->size() && ni==n && ID==-1||(ni==8 && (ID==6||ID==9||ID==12||ID==18||ID==36||ID==39)))   
        {
            string str=M2r::MStr(r->m_Set[i]);
            printf("%d->%s=>",i,str.c_str());
            string strj=M2r::MStr(r->m_Set[j]);
            printf("%d->%s=>",j,strj.c_str());            
            string strR=calcRingInvariant(&S1i);
            printf("R%d_%d:N0n0bAbOn1n2n4n5n6n7n8S1N2=%s\n",ni,ID,strR.c_str());            
            //S1i.printTable();
#if PRINT_LOG            
            fout<<i<<"->"<<str<<","<<j<<"->"<<strj<<"=>";
            fout<<"R"<<ni<<"_"<<ID<<":N0n0bAbOn1n2n4n5n6n7n8S1N2="<<strR<<endl;
            bFind=true;
#endif            
            break;
        }           
    }    
#if PRINT_LOG
    fout.close();    
    if(!bFind)    
        system(strCmd.c_str());
    else
        printf("子环表示已输出到文件%s\n",sz);
#endif           
}

void findsubring(Mnr *r,int n)
{
#define PRINT_LOG 1    
    bool bFind=false;    
#if PRINT_LOG
    char sz[100]="0";
    sprintf(sz,"R%d_%d.txt",r->size(),time(NULL));
    ofstream fout(sz);
#endif    
    string strCmd="del ";
    strCmd+=sz;
    for(int i=0;i<r->size()-1;i++)
    for(int j=i+1;j<r->size();j++)
    {
        //int j=i+1;
        vector<int> v;
        v.push_back(i);
        v.push_back(j);        
        Subring S1i(r,v);
        int ni=S1i.size();
        if(n>0 && ni!=n && ni!=8)
            continue;
        int ID=IdRing(&S1i);
        if(n<r->size() && ni==n && ID==386 || ID==3052 || ID==5552 || ID==-1||(ni==8 && (ID==6||ID==9||ID==12||ID==18||ID==31||ID==32||ID==39)))   
        {
            string str=Mnr::MStr(r->m_Set[i]);
            printf("%d->%s=>",i,str.c_str());
            string strj=Mnr::MStr(r->m_Set[j]);
            printf("%d->%s=>",j,strj.c_str());            
            string strR=calcRingInvariant(&S1i);
            printf("R%d_%d:N0n0bAbOn1n2n4n5n6n7n8S1N2=%s\n",ni,ID,strR.c_str());        
            if(ID==3052){
                string I1=calcI1(&S1i);
                string I2=calcI2(&S1i);   
                printf("I1I2=%s,%s\n",I1.c_str(),I2.c_str());
            }    
            //S1i.printTable();
#if PRINT_LOG            
            fout<<i<<"->"<<str<<","<<j<<"->"<<strj<<"=>";
            fout<<"R"<<ni<<"_"<<ID<<":N0n0bAbOn1n2n4n5n6n7n8S1N2="<<strR<<endl;
            bFind=true;
#endif
            break;
        }           
    }
#if PRINT_LOG
    fout.close();    
    if(!bFind)    
        system(strCmd.c_str());
    else
        printf("子环表示已输出到文件%s\n",sz);
#endif    
}

IRing* newRppp(int ID,int p,int sID){    
   //if(/* ID!=29 && ID!=46 ID!=26 && ID!=34 && ID!=49*/ID!=44)
       //return NULL;
   //p=2;
   if(ID==1){
        return new ZmodnZ(p*p*p,p*p*p*p*p*p); 
   }else if(ID==2){
        return new ZmodnZ(p,p*p*p*p);    
   }else if(ID==3){ 
        return new ZmodnZ(1,p*p*p);
   }else if(ID==4){
        return new ZmodnZ(p*p,p*p*p*p*p);
   }else if(ID==5){    
        M2r* r=new M2r();   
        r->m_r=new ZmodnZ(1,p*p*p);
        vector<MATRIXi> gen;    
        MATRIXi A(2,vector<int>(2,0));
        MATRIXi B(2,vector<int>(2,0));        
        A[0][0]=0;
        A[0][1]=p;
        A[1][0]=0;
        A[1][1]=0;
        B[0][0]=p*p;
        B[0][1]=p;
        B[1][0]=0;
        B[1][1]=0;
        gen.push_back(A);
        gen.push_back(B);
        r->m_flag=1;
        r->m_Set=M2r::FR(r->m_r,gen); 
        return r;        
   }else if(ID==8){    
        M2r* r=new M2r();   
        r->m_r=new ZmodnZ(1,p*p);
        vector<MATRIXi> gen;    
        MATRIXi A(2,vector<int>(2,0));
        MATRIXi B(2,vector<int>(2,0));        
        A[0][0]=0;
        A[0][1]=1;
        A[1][0]=0;
        A[1][1]=0;
        B[0][0]=p;
        B[0][1]=0;
        B[1][0]=0;
        B[1][1]=0;
        gen.push_back(A);
        gen.push_back(B);
        r->m_flag=1;
        r->m_Set=M2r::FR(r->m_r,gen); 
        return r;    
   }else if(ID==10){    
        M2r* r=new M2r();   
        r->m_r=new ZmodnZ(1,p*p);
        vector<MATRIXi> gen;    
        MATRIXi A(2,vector<int>(2,0));
        MATRIXi B(2,vector<int>(2,0));        
        A[0][0]=p;
        A[0][1]=0;
        A[1][0]=0;
        A[1][1]=0;
        B[0][0]=p;
        B[0][1]=0;
        B[1][0]=1;
        B[1][1]=0;
        gen.push_back(A);
        gen.push_back(B);
        r->m_flag=1;
        r->m_Set=M2r::FR(r->m_r,gen); 
        return r;
   }else if(ID==11){    
        M2r* r=new M2r();   
        r->m_r=new ZmodnZ(1,p*p);
        vector<MATRIXi> gen;    
        MATRIXi A(2,vector<int>(2,0));
        MATRIXi B(2,vector<int>(2,0));        
        A[0][0]=p;
        A[0][1]=0;
        A[1][0]=0;
        A[1][1]=p;
        B[0][0]=p;
        B[0][1]=1;
        B[1][0]=0;
        B[1][1]=p;
        gen.push_back(A);
        gen.push_back(B);
        r->m_flag=1;
        r->m_Set=M2r::FR(r->m_r,gen); 
        return r;        
   }else if(ID==13){    
        M2r* r=new M2r();   
        r->m_r=new ZmodnZ(1,p*p);
        vector<MATRIXi> gen;    
        MATRIXi A(2,vector<int>(2,0));    
        A[0][0]=p;
        A[0][1]=0;
        A[1][0]=0;
        A[1][1]=1;  
        gen.push_back(A);
        r->m_flag=1;
        r->m_Set=M2r::FR(r->m_r,gen);
#if 0
        for(int i=0;i<r->size();i++){
               string str=M2r::MStr(r->m_Set[i]);
            printf("%d->%s=>",i,str.c_str()); 
        }        
#endif        
        return r;
   }else if(ID==15){    
        M2r* r=new M2r();   
        r->m_r=new ZmodnZ(1,p*p);
        vector<MATRIXi> gen;    
        MATRIXi A(2,vector<int>(2,0));
        MATRIXi B(2,vector<int>(2,0));        
        A[0][0]=0;
        A[0][1]=0;
        A[1][0]=0;
        A[1][1]=1;
        B[0][0]=0;
        B[0][1]=p;
        B[1][0]=0;
        B[1][1]=0;
        gen.push_back(A);
        gen.push_back(B);
        r->m_flag=1;
        r->m_Set=M2r::FR(r->m_r,gen); 
        return r;    
   }else if(ID==16){    
        M2r* r=new M2r();   
        r->m_r=new ZmodnZ(1,p*p*p);
        vector<MATRIXi> gen;    
        MATRIXi A(2,vector<int>(2,0));
        MATRIXi B(2,vector<int>(2,0));        
        A[0][0]=p;
        A[0][1]=0;
        A[1][0]=0;
        A[1][1]=0;
        B[0][0]=p*p;
        B[0][1]=p*p;
        B[1][0]=0;
        B[1][1]=0;
        gen.push_back(A);
        gen.push_back(B);
        r->m_flag=1;
        r->m_Set=M2r::FR(r->m_r,gen); 
        return r;        
   }else if(ID==19){//不用下面的2阶矩阵表示Rppp‘,因为Rppp‘(19,2)=R8_19,但Rppp‘(19,3)!=R27_19(,Rppp‘(19,3)=R27_13、R27_11)
/*
Rppp‘:
        M2r* r=new M2r();   
        r->m_r=new ZmodnZ(1,p*p);
        vector<MATRIXi> gen;    
        MATRIXi A(2,vector<int>(2,0));
        MATRIXi B(2,vector<int>(2,0));        
        A[0][0]=p;
        A[0][1]=p;
        A[1][0]=0;
        A[1][1]=p;
        B[0][0]=0;
        B[0][1]=1;
        B[1][0]=0;
        B[1][1]=p;
        gen.push_back(A);
        gen.push_back(B);
        r->m_flag=1;
        r->m_Set=M2r::FR(r->m_r,gen);         
        return r;    
*/   
        Mnr* r=new Mnr();   
        r->m_r=new ZmodnZ(1,p*p);
        r->m_n=3; 
        vector<MATRIXi8> gen;        
        MATRIXi8 A(3,vector<TElem>(3,0)); 
        MATRIXi8 B(3,vector<TElem>(3,0));                           
        A[0][0]=0;
        A[0][1]=0;
        A[0][2]=0;
        A[1][0]=p;
        A[1][1]=p;
        A[1][2]=1;
        A[2][0]=0;
        A[2][1]=0;
        A[2][2]=0;        
        B[0][0]=0;
        B[0][1]=0;
        B[0][2]=p;
        B[1][0]=0;
        B[1][1]=0;
        B[1][2]=1;
        B[2][0]=0;
        B[2][1]=0;
        B[2][2]=p;        
        gen.push_back(A);
        gen.push_back(B);
        r->m_flag=1;
        r->m_Set=Mnr::FR(r->m_r,gen); 
        return r;        
   }else if(ID==20){    
        M2r* r=new M2r();   
        r->m_r=new ZmodnZ(1,p*p);
        vector<MATRIXi> gen;    
        MATRIXi A(2,vector<int>(2,0));
        MATRIXi B(2,vector<int>(2,0));        
        A[0][0]=0;
        A[0][1]=p;
        A[1][0]=0;
        A[1][1]=0;
        B[0][0]=1;
        B[0][1]=p;
        B[1][0]=0;
        B[1][1]=0;
        gen.push_back(A);
        gen.push_back(B);
        r->m_flag=1;
        r->m_Set=M2r::FR(r->m_r,gen); 
        return r;    
   }else if(ID==21){    
        M2r* r=new M2r();   
        r->m_r=new ZmodnZ(1,p*p);
        vector<MATRIXi> gen;    
        MATRIXi A(2,vector<int>(2,0));        
        A[0][0]=1;
        A[0][1]=p;
        A[1][0]=p;
        A[1][1]=1;
        gen.push_back(A);
        r->m_flag=1;
        r->m_Set=M2r::FR(r->m_r,gen); 
        return r;
   }else if(ID==23){    
        M2r* r=new M2r();   
        r->m_r=new ZmodnZ(1,p*p*p);
        vector<MATRIXi> gen;    
        MATRIXi A(2,vector<int>(2,0));        
        A[0][0]=p;
        A[0][1]=p;
        A[1][0]=0;
        A[1][1]=p;
        gen.push_back(A);
        r->m_flag=1;
        r->m_Set=M2r::FR(r->m_r,gen); 
        return r;        
   }else if(ID==24){    
        M2r* r=new M2r();   
        r->m_r=new ZmodnZ(1,p*p);
        vector<MATRIXi> gen;    
        MATRIXi A(2,vector<int>(2,0));        
        A[0][0]=0;
        A[0][1]=1;
        A[1][0]=p;
        A[1][1]=0;
        gen.push_back(A);
        r->m_flag=1;
        r->m_Set=M2r::FR(r->m_r,gen); 
        return r;
   }else if(ID==25){// 必须有3个生成元    
        M2r* r=new M2r();   
        r->m_r=new ZmodnZ(1,p*p);
        vector<MATRIXi> gen;    
        MATRIXi A(2,vector<int>(2,0));
        MATRIXi B(2,vector<int>(2,0));    
        MATRIXi C(2,vector<int>(2,p));        
        A[0][0]=p;
        A[0][1]=0;
        A[1][0]=0;
        A[1][1]=0;
        B[0][0]=0;
        B[0][1]=0;
        B[1][0]=0;
        B[1][1]=p;
        gen.push_back(A);
        gen.push_back(B);
        gen.push_back(C);        
        r->m_flag=1;
        r->m_Set=M2r::FR(r->m_r,gen); 
#if 0
        for(int i=0;i<r->size();i++){
                for(int j=0;j<r->size();j++){
                vector<int> vi;
                vi.push_back(i);
                vi.push_back(j);           
                Subring si(r,vi);
                int ni=si.size();
                if(ni==r->size()){           
                    string str=M2r::MStr(r->m_Set[i]);
                    printf("%d->%s=>",i,str.c_str()); 
                    string strj=M2r::MStr(r->m_Set[j]);
                    printf("%d->%s=>",j,strj.c_str());     
                    break;            
                }
            }    
        }        
#endif        
        return r;
   }else if(ID==26){
        Mnr* r=new Mnr();   
        r->m_r=new ZmodnZ(1,p);
        r->m_n=4; 
        vector<MATRIXi8> gen;        
        MATRIXi8 A(4,vector<TElem>(4,0)); 
        MATRIXi8 B(4,vector<TElem>(4,0));         
        A[0][0]=1;
        A[0][1]=1;
        A[0][2]=0;
        A[0][3]=0;        
        A[1][0]=0;
        A[1][1]=1;
        A[1][2]=0;
        A[1][3]=1;    
        A[2][0]=0;
        A[2][1]=1;
        A[2][2]=0;
        A[2][3]=1;
        A[3][0]=1;
        A[3][1]=1;
        A[3][2]=0;
        A[3][3]=0;       
        B[0][0]=0;
        B[0][1]=0;
        B[0][2]=1;
        B[0][3]=1;        
        B[1][0]=1;
        B[1][1]=0;
        B[1][2]=1;
        B[1][3]=0;        
        B[2][0]=1;
        B[2][1]=0;
        B[2][2]=1;
        B[2][3]=0;
        B[3][0]=0;
        B[3][1]=0;
        B[3][2]=1;
        B[3][3]=1;        
        gen.push_back(A);
        gen.push_back(B);
        r->m_flag=1;
        r->m_Set=Mnr::FR(r->m_r,gen); 
        return r;        
   }else if(ID==28){    
        Mnr* r=new Mnr();   
        r->m_r=new ZmodnZ(1,p);
        r->m_n=3; 
        vector<MATRIXi8> gen;        
        MATRIXi8 A(3,vector<TElem>(3,0)); 
        MATRIXi8 B(3,vector<TElem>(3,0));                           
        A[0][0]=0;
        A[0][1]=0;
        A[0][2]=1;
        A[1][0]=0;
        A[1][1]=1;
        A[1][2]=1;
        A[2][0]=0;
        A[2][1]=1;
        A[2][2]=1;        
        B[0][0]=0;
        B[0][1]=1;
        B[0][2]=1;
        B[1][0]=0;
        B[1][1]=1;
        B[1][2]=1;
        B[2][0]=0;
        B[2][1]=1;
        B[2][2]=1;        
        gen.push_back(A);
        gen.push_back(B);
        r->m_flag=1;
        r->m_Set=Mnr::FR(r->m_r,gen); 
        return r;
   }else if(ID==29){//Rppp(29,2)=R8_29,但Rppp(29,3)=R27_49    
        Mnr* r=new Mnr();   
        r->m_r=new ZmodnZ(1,p);
        r->m_n=3; 
        vector<MATRIXi8> gen;        
        MATRIXi8 A(3,vector<TElem>(3,0)); 
        MATRIXi8 B(3,vector<TElem>(3,0));                           
        A[0][0]=1;
        A[0][1]=0;
        A[0][2]=1;
        A[1][0]=0;
        A[1][1]=1;
        A[1][2]=1;
        A[2][0]=0;
        A[2][1]=1;
        A[2][2]=1;        
        B[0][0]=1;
        B[0][1]=0;
        B[0][2]=1;
        B[1][0]=0;
        B[1][1]=0;
        B[1][2]=0;
        B[2][0]=0;
        B[2][1]=0;
        B[2][2]=0;    
        gen.push_back(A);
        gen.push_back(B);
        r->m_flag=1;
        r->m_Set=Mnr::FR(r->m_r,gen); 
        return r;
   }else if(ID==30){// 必须有3个生成元
        Mnr* r=new Mnr();   
        r->m_r=new ZmodnZ(1,p);
        r->m_n=4; 
        vector<MATRIXi8> gen;        
        MATRIXi8 A(4,vector<TElem>(4,0)); 
        MATRIXi8 B(4,vector<TElem>(4,0));         
        MATRIXi8 C(4,vector<TElem>(4,0));
        A[0][0]=0;
        A[0][1]=0;
        A[0][2]=0;
        A[0][3]=0;
        A[1][0]=1;
        A[1][1]=1;
        A[1][2]=0;
        A[1][3]=0; 
        A[2][0]=0;
        A[2][1]=0;
        A[2][2]=1;
        A[2][3]=0;
        A[3][0]=0;
        A[3][1]=0;
        A[3][2]=0;
        A[3][3]=1;
        B[0][0]=0;
        B[0][1]=0;
        B[0][2]=0;
        B[0][3]=0;
        B[1][0]=1;
        B[1][1]=1;
        B[1][2]=0;
        B[1][3]=0; 
        B[2][0]=1;
        B[2][1]=0;
        B[2][2]=1;
        B[2][3]=0;
        B[3][0]=0;
        B[3][1]=0;
        B[3][2]=0;
        B[3][3]=1;
        C[0][0]=0;
        C[0][1]=0;
        C[0][2]=0;
        C[0][3]=0;
        C[1][0]=1;
        C[1][1]=1;
        C[1][2]=0;
        C[1][3]=0; 
        C[2][0]=0;
        C[2][1]=0;
        C[2][2]=1;
        C[2][3]=0;
        C[3][0]=1;
        C[3][1]=0;
        C[3][2]=0;
        C[3][3]=1;        
        gen.push_back(A);
        gen.push_back(B);
        gen.push_back(C);        
        r->m_flag=1;
        r->m_Set=Mnr::FR(r->m_r,gen); 
#if 0
        for(int i=0;i<r->size();i++){
                for(int j=0;j<r->size();j++){
                vector<int> vi;
                vi.push_back(i);
                vi.push_back(j);           
                Subring si(r,vi);
                int ni=si.size();
                if(ni==r->size()){           
                    string str=Mnr::MStr(r->m_Set[i]);
                    printf("%d->%s=>",i,str.c_str()); 
                    string strj=Mnr::MStr(r->m_Set[j]);
                    printf("%d->%s=>",j,strj.c_str());     
                    break;            
                }
            }    
        }        
#endif        
        return r;    
   }else if(ID==33){    
        Mnr* r=new Mnr();   
        r->m_r=new ZmodnZ(1,p);
        r->m_n=4; 
        vector<MATRIXi8> gen;        
        MATRIXi8 A(4,vector<TElem>(4,0)); 
        A[0][0]=1;
        A[0][1]=0;
        A[0][2]=0;
        A[0][3]=1;
        A[1][0]=1;
        A[1][1]=0;
        A[1][2]=0;
        A[1][3]=0; 
        A[2][0]=1;
        A[2][1]=1;
        A[2][2]=0;
        A[2][3]=1;
        A[3][0]=1;
        A[3][1]=0;
        A[3][2]=0;
        A[3][3]=1;
        gen.push_back(A);
        r->m_flag=1;
        r->m_Set=Mnr::FR(r->m_r,gen); 
        return r;            
   }else if(ID==34){//Rppp(34,2)=R8_34,但Rppp(34,3)=R27_49    
        Mnr* r=new Mnr();   
        r->m_r=new ZmodnZ(1,p);
        r->m_n=4; 
        vector<MATRIXi8> gen;        
        MATRIXi8 A(4,vector<TElem>(4,0)); 
        MATRIXi8 B(4,vector<TElem>(4,1));         
        A[0][0]=1;
        A[0][1]=0;
        A[0][2]=0;
        A[0][3]=1;
        A[1][0]=1;
        A[1][1]=0;
        A[1][2]=0;
        A[1][3]=1; 
        A[2][0]=0;
        A[2][1]=1;
        A[2][2]=1;
        A[2][3]=0;
        A[3][0]=1;
        A[3][1]=0;
        A[3][2]=0;
        A[3][3]=1;    
        gen.push_back(A);
        gen.push_back(B);
        r->m_flag=1;
        r->m_Set=Mnr::FR(r->m_r,gen); 
        return r;        
   }else if(ID==340){//Rppp(34,2)=R8_34,但Rppp(34,3)=R27_28    
        Mnr* r=new Mnr();   
        r->m_r=new ZmodnZ(1,p);
        r->m_n=3; 
        vector<MATRIXi8> gen;        
        MATRIXi8 A(3,vector<TElem>(3,0)); 
        MATRIXi8 B(3,vector<TElem>(3,0));                           
        A[0][0]=0;
        A[0][1]=0;
        A[0][2]=1;
        A[1][0]=0;
        A[1][1]=1;
        A[1][2]=1;
        A[2][0]=0;
        A[2][1]=0;
        A[2][2]=0;        
        B[0][0]=0;
        B[0][1]=1;
        B[0][2]=1;
        B[1][0]=0;
        B[1][1]=0;
        B[1][2]=0;
        B[2][0]=0;
        B[2][1]=0;
        B[2][2]=0;        
        gen.push_back(A);
        gen.push_back(B);
        r->m_flag=1;
        r->m_Set=Mnr::FR(r->m_r,gen); 
        return r;    
   }else if(ID==37){    
        Mnr* r=new Mnr();   
        r->m_r=new ZmodnZ(1,p);
        r->m_n=3; 
        vector<MATRIXi8> gen;        
        MATRIXi8 A(3,vector<TElem>(3,0)); 
        MATRIXi8 B(3,vector<TElem>(3,0));                           
        A[0][0]=1;
        A[0][1]=1;
        A[0][2]=0;
        A[1][0]=0;
        A[1][1]=1;
        A[1][2]=0;
        A[2][0]=0;
        A[2][1]=1;
        A[2][2]=0;        
        B[0][0]=0;
        B[0][1]=1;
        B[0][2]=1;
        B[1][0]=0;
        B[1][1]=0;
        B[1][2]=0;
        B[2][0]=0;
        B[2][1]=0;
        B[2][2]=0;        
        gen.push_back(A);
        gen.push_back(B);
        r->m_flag=1;
        r->m_Set=Mnr::FR(r->m_r,gen); 
        return r;    
   }else if(ID==38){    
        Mnr* r=new Mnr();   
        r->m_r=new ZmodnZ(1,p);
        r->m_n=4; 
        vector<MATRIXi8> gen;        
        MATRIXi8 A(4,vector<TElem>(4,0)); 
        A[0][0]=0;
        A[0][1]=1;
        A[0][2]=0;
        A[0][3]=1;
        A[1][0]=1;
        A[1][1]=1;
        A[1][2]=0;
        A[1][3]=0; 
        A[2][0]=0;
        A[2][1]=0;
        A[2][2]=1;
        A[2][3]=1;
        A[3][0]=0;
        A[3][1]=1;
        A[3][2]=0;
        A[3][3]=1;    
        gen.push_back(A);
        r->m_flag=1;
        r->m_Set=Mnr::FR(r->m_r,gen); 
        return r;        
   }else if(ID==41){    
        Mnr* r=new Mnr();   
        r->m_r=new ZmodnZ(1,p);
        r->m_n=4; 
        vector<MATRIXi8> gen;        
        MATRIXi8 A(4,vector<TElem>(4,0)); 
        MATRIXi8 B(4,vector<TElem>(4,0));                           
        A[0][0]=1;
        A[0][3]=1;        
        A[1][1]=1;
        B[0][0]=1;
        B[0][3]=1;
        B[1][3]=1;        
        gen.push_back(A);
        gen.push_back(B);
        r->m_flag=1;
        r->m_Set=Mnr::FR(r->m_r,gen); 
        return r;
   }else if(ID==43){// 必须有3个生成元
        Mnr* r=new Mnr();   
        r->m_r=new ZmodnZ(1,p);
        r->m_n=4; 
        vector<MATRIXi8> gen;        
        MATRIXi8 A(4,vector<TElem>(4,0)); 
        MATRIXi8 B(4,vector<TElem>(4,0));         
        MATRIXi8 C(4,vector<TElem>(4,0));
        A[0][0]=0;
        A[0][1]=1;
        A[0][2]=0;
        A[0][3]=0;
        A[1][0]=0;
        A[1][1]=1;
        A[1][2]=0;
        A[1][3]=0; 
        A[2][0]=0;
        A[2][1]=0;
        A[2][2]=1;
        A[2][3]=0;
        A[3][0]=0;
        A[3][1]=0;
        A[3][2]=0;
        A[3][3]=1;
        B[0][0]=0;
        B[0][1]=1;
        B[0][2]=1;
        B[0][3]=1;
        B[1][0]=0;
        B[1][1]=1;
        B[1][2]=0;
        B[1][3]=0; 
        B[2][0]=0;
        B[2][1]=0;
        B[2][2]=1;
        B[2][3]=0;
        B[3][0]=0;
        B[3][1]=0;
        B[3][2]=0;
        B[3][3]=1;
        C[0][0]=0;
        C[0][1]=1;
        C[0][2]=1;
        C[0][3]=0;
        C[1][0]=0;
        C[1][1]=1;
        C[1][2]=0;
        C[1][3]=0; 
        C[2][0]=0;
        C[2][1]=0;
        C[2][2]=1;
        C[2][3]=0;
        C[3][0]=0;
        C[3][1]=0;
        C[3][2]=0;
        C[3][3]=1;    
        gen.push_back(A);
        gen.push_back(B);
        gen.push_back(C);        
        r->m_flag=1;
        r->m_Set=Mnr::FR(r->m_r,gen); 
#if 0
        for(int i=0;i<r->size();i++){
                for(int j=0;j<r->size();j++){
                vector<int> vi;
                vi.push_back(i);
                vi.push_back(j);           
                Subring si(r,vi);
                int ni=si.size();
                if(ni==r->size()){           
                    string str=Mnr::MStr(r->m_Set[i]);
                    printf("%d->%s=>",i,str.c_str()); 
                    string strj=Mnr::MStr(r->m_Set[j]);
                    printf("%d->%s=>",j,strj.c_str());     
                    break;            
                }
            }    
        }        
#endif        
        return r;        
   }else if(ID==44){
        Mnr* r=new Mnr();   
        r->m_r=new ZmodnZ(1,p);
        r->m_n=3; 
        vector<MATRIXi8> gen;        
        MATRIXi8 A(3,vector<TElem>(3,0)); 
        MATRIXi8 B(3,vector<TElem>(3,0));
/*    
不用下面的3阶矩阵表示Rppp‘,因为Rppp‘(44,2)=R8_44,但Rppp‘(44,3)!=R27_44(,Rppp‘(44,3)=R27_47    
        A[0][0]=0;
        A[0][1]=0;
        A[0][2]=0;
        A[1][0]=0;
        A[1][1]=0;
        A[1][2]=1;
        A[2][0]=0;
        A[2][1]=1;
        A[2][2]=0;        
        B[0][0]=0;
        B[0][1]=1;
        B[0][2]=1;
        B[1][0]=0;
        B[1][1]=0;
        B[1][2]=0;
        B[2][0]=0;
        B[2][1]=0;
        B[2][2]=0;        
        */
        A[0][0]=1;
        A[0][1]=0;
        A[0][2]=0;
        A[1][0]=0;
        A[1][1]=1;
        A[1][2]=0; 
        A[2][0]=0;
        A[2][1]=0;
        A[2][2]=0;
        B[0][0]=0;
        B[0][1]=0;
        B[0][2]=0;
        B[1][0]=1;
        B[1][1]=0;
        B[1][2]=0;
        B[2][0]=1;
        B[2][1]=0;
        B[2][2]=0;        
        gen.push_back(A);
        gen.push_back(B);
        r->m_flag=1;
        r->m_Set=Mnr::FR(r->m_r,gen); 
        return r;                    
   }else if(ID==45){//Rppp(45,2)=R8_45,但Rppp(45,3)=R27_49    
        Mnr* r=new Mnr();   
        r->m_r=new ZmodnZ(1,p);
        r->m_n=3; 
        vector<MATRIXi8> gen;        
        MATRIXi8 A(3,vector<TElem>(3,0)); 
        MATRIXi8 B(3,vector<TElem>(3,0));                           
        A[0][0]=0;
        A[0][1]=0;
        A[0][2]=0;
        A[1][0]=0;
        A[1][1]=1;
        A[1][2]=1;
        A[2][0]=0;
        A[2][1]=1;
        A[2][2]=1;        
        B[0][0]=1;
        B[0][1]=1;
        B[0][2]=1;
        B[1][0]=0;
        B[1][1]=1;
        B[1][2]=0;
        B[2][0]=0;
        B[2][1]=0;
        B[2][2]=1;        
        gen.push_back(A);
        gen.push_back(B);
        r->m_flag=1;
        r->m_Set=Mnr::FR(r->m_r,gen); 
        return r;
   }else if(ID==46){//Rppp(46,2)=R8_46,但Rppp(46,3)=R27_48、R27_51
        Mnr* r=new Mnr();   
        r->m_r=new ZmodnZ(1,p);
        r->m_n=3; 
        vector<MATRIXi8> gen;        
        MATRIXi8 A(3,vector<TElem>(3,0));                           
        A[0][0]=1;
        A[0][1]=0;
        A[0][2]=1;
        A[1][0]=0;
        A[1][1]=0;
        A[1][2]=1;
        A[2][0]=0;
        A[2][1]=1;
        A[2][2]=0;        
        gen.push_back(A);
        r->m_flag=1;
        r->m_Set=Mnr::FR(r->m_r,gen); 
        return r;        
   }else if(ID==47){    
        Mnr* r=new Mnr();   
        r->m_r=new ZmodnZ(1,p);
        r->m_n=4; 
        vector<MATRIXi8> gen;        
        MATRIXi8 A(4,vector<TElem>(4,0)); 
        MATRIXi8 B(4,vector<TElem>(4,0));                           
        A[0][0]=1;
        A[1][3]=1;        
        A[3][3]=1;
        B[0][0]=1;
        B[0][3]=1;
        B[1][3]=1;    
        gen.push_back(A);
        gen.push_back(B);
        r->m_flag=1;
        r->m_Set=Mnr::FR(r->m_r,gen); 
        return r;    
   }else if(ID==48){    
        Mnr* r=new Mnr();   
        r->m_r=new ZmodnZ(1,p);
        r->m_n=4; 
        vector<MATRIXi8> gen;        
        MATRIXi8 A(4,vector<TElem>(4,0)); 
        MATRIXi8 B(4,vector<TElem>(4,0));                           
        A[0][0]=1;
        A[1][1]=1;        
        A[1][3]=1;
        A[3][3]=1;        
        B[0][0]=1;
        B[0][3]=1;    
        gen.push_back(A);
        gen.push_back(B);
        r->m_flag=1;
        r->m_Set=Mnr::FR(r->m_r,gen); 
        return r;        
   }else if(ID==49){    
        M2r* r=new M2r();   
        r->m_r=new ZmodnZ(1,p);
        vector<MATRIXi> gen;    
        MATRIXi A(2,vector<int>(2,0));
        MATRIXi B(2,vector<int>(2,0));        
        A[0][0]=1;
        A[0][1]=1;
        A[1][0]=0;
        A[1][1]=1;
        B[0][0]=1;
        B[0][1]=0;
        B[1][0]=0;
        B[1][1]=0;
        gen.push_back(A);
        gen.push_back(B);
        r->m_flag=1;
        r->m_Set=M2r::FR(r->m_r,gen); 
        return r;    
   }else if(ID==50){    
        Mnr* r=new Mnr();   
        r->m_r=new ZmodnZ(1,p);
        r->m_n=3; 
        vector<MATRIXi8> gen;        
        MATRIXi8 A(3,vector<TElem>(3,0)); 
        MATRIXi8 B(3,vector<TElem>(3,0));                           
        A[0][0]=1;
        A[0][1]=0;
        A[0][2]=0;
        A[1][0]=0;
        A[1][1]=0;
        A[1][2]=0;
        A[2][0]=0;
        A[2][1]=1;
        A[2][2]=1;        
        B[0][0]=0;
        B[0][1]=0;
        B[0][2]=0;
        B[1][0]=0;
        B[1][1]=1;
        B[1][2]=0;
        B[2][0]=0;
        B[2][1]=0;
        B[2][2]=1;        
        gen.push_back(A);
        gen.push_back(B);
        r->m_flag=1;
        r->m_Set=Mnr::FR(r->m_r,gen); 
        return r;        
   }else if(ID==51){
        //p=2;       
        M2r* r=new M2r();   
        //r->m_r=new ZmodnZ(1,p*p);
        M2r *r1=new M2r();
        r1->initK(p);
        r->m_r=r1;            
        vector<MATRIXi> gen;    
        MATRIXi A(2,vector<int>(2,0));    
        A[0][0]=1;
        A[0][1]=1;
        A[1][0]=1;
        A[1][1]=0;      
        gen.push_back(A);        
        r->m_flag=1;
        r->m_Set=M2r::FR(r->m_r,gen);
#if 0
        for(int i=0;i<r->size();i++){
               string str=M2r::MStr(r->m_Set[i]);
            printf("%d->%s=>",i,str.c_str()); 
        }        
#endif        
        return r;        
   }else{
        return NULL;
   }        
}

int main()

    {
        for(int i=1;i<=59;i++){
           IRing* r8=newRppp(i,2);
           IRing* r27=newRppp(i,3);           
           if(!r8||!r27)
               continue;
            int ID8=IdRing(r8);
            int ID27=IdRing(r27);            
            #if 1
                printf("Rppp(%d,2)=R%d_%d,Rppp(%d,3)=R%d_%d\n",i,r8->size(),ID8,i,r27->size(),ID27);
            #else
                string str=calcRingInvariant(r8);
                printf("R%d_%d:N0n0bAbOn1n2n4n5n6n7n8S1N2=%s\n",r8->size(),ID8,str.c_str());
                string I1=calcI1(r8);
                string I2=calcI2(r8);   
                printf("I1I2=%s,%s\n",I1.c_str(),I2.c_str());                
                str=calcRingInvariant(r27);
                printf("R%d_%d:N0n0bAbOn1n2n4n5n6n7n8S1N2=%s\n",r27->size(),ID27,str.c_str());
                I1=calcI1(r27);
                I2=calcI2(r27);   
                printf("I1I2=%s,%s\n",I1.c_str(),I2.c_str());
            #endif        
        }
    }
    return 0;
}

p^3阶有限环序列以及R27的编号

标签:mod   make   efi   position   vector   sort   tin   sprintf   too   

原文地址:https://www.cnblogs.com/Ivanhan2019/p/13063033.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!