53, 54, 58: Done in class 55: gap> x:=X(Rationals,"x"); x gap> a:=x^3+x+1; x^3+x+1 gap> b:=x^2+x; x^2+x gap> ShowGcd(a,b); x^3+x+1=(x-1)*(x^2+x) + 2*x+1 x^2+x=(1/2*x+1/4)*(2*x+1) + -1/4 2*x+1=(-8*x-4)*(-1/4) + 0 The Gcd is -1/4 = 1*(x^2+x) + (-1/2*x-1/4)*(2*x+1) = (-1/2*x-1/4)*(x^3+x+1) + (1/2*x^2-1/4*x+3/4)*(x^2+x) -1/4 56: gap> a:=Filtered([1..23],x->Gcd(x,24)=1); [ 1, 5, 7, 11, 13, 17, 19, 23 ] gap> List(a,x->OrderMod(x,24)); [ 1, 2, 2, 2, 2, 2, 2, 2 ] No primitive element. For a prime there would be only one element of order 2, here are many. 57: Define A and B gap> A:=[[0,0,0,1],[1,0,0,0],[0,1,0,0],[0,0,1,2]]*One(GF(3)); [ [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0 ], [ Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3) ], [ 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3) ], [ 0*Z(3), 0*Z(3), Z(3)^0, Z(3) ] ] gap> Display(A); . . . 1 1 . . . . 1 . . . . 1 2 gap> B:=[[0,2,1,2],[0,0,2,1],[0,0,0,2],[2,1,2,1]]*One(GF(3)); [ [ 0*Z(3), Z(3), Z(3)^0, Z(3) ], [ 0*Z(3), 0*Z(3), Z(3), Z(3)^0 ], [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3) ], [ Z(3), Z(3)^0, Z(3), Z(3)^0 ] ] # order 5 (16th power) gap> a:=A^16; [ [ Z(3), 0*Z(3), Z(3), 0*Z(3) ], [ Z(3), Z(3), 0*Z(3), Z(3) ], [ Z(3), Z(3), Z(3), 0*Z(3) ], [ 0*Z(3), Z(3), 0*Z(3), Z(3) ] ] gap> b:=B^16; [ [ Z(3)^0, 0*Z(3), Z(3), Z(3) ], [ Z(3)^0, Z(3)^0, 0*Z(3), Z(3) ], [ Z(3), Z(3)^0, Z(3)^0, 0*Z(3) ], [ 0*Z(3), Z(3), Z(3), Z(3) ] ] # naive discrete log gap> First([0..4],x->a^x=b); 3 # order 16: gap> a:=A^5; [ [ Z(3), Z(3)^0, Z(3), Z(3) ], [ Z(3)^0, Z(3), Z(3)^0, Z(3) ], [ 0*Z(3), Z(3)^0, Z(3), Z(3)^0 ], [ Z(3)^0, Z(3), Z(3), 0*Z(3) ] ] gap> b:=B^5; [ [ Z(3)^0, Z(3)^0, 0*Z(3), Z(3)^0 ], [ Z(3)^0, Z(3)^0, Z(3)^0, 0*Z(3) ], [ Z(3)^0, Z(3)^0, Z(3)^0, Z(3)^0 ], [ Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3) ] ] Hensel lifting, Order 16 Step 1, take 8th powers: gap> a^8; [ [ Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ], [ 0*Z(3), Z(3), 0*Z(3), 0*Z(3) ], [ 0*Z(3), 0*Z(3), Z(3), 0*Z(3) ], [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3) ] ] gap> b^8; [ [ Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ], [ 0*Z(3), Z(3), 0*Z(3), 0*Z(3) ], [ 0*Z(3), 0*Z(3), Z(3), 0*Z(3) ], [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3) ] ] # as p=2 we can determine the exponent simply by testing for equality gap> a^8=b^8; true gap> e0:=1; # yes, exponent is 1 1 # now change b to divide off a^e0. The result will be a power of a^2. gap> b1:=b/a; [ [ Z(3), Z(3), Z(3), Z(3)^0 ], [ 0*Z(3), Z(3), Z(3), Z(3) ], [ Z(3)^0, 0*Z(3), Z(3), Z(3) ], [ Z(3), Z(3), Z(3)^0, Z(3)^0 ] ] gap> a1:=a^2; [ [ Z(3)^0, Z(3)^0, Z(3)^0, Z(3) ], [ 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0 ], [ Z(3), 0*Z(3), Z(3)^0, Z(3)^0 ], [ Z(3)^0, Z(3)^0, Z(3), Z(3) ] ] # repeat the process, but a1 now has order 8, so 4th powers: gap> a1^4=b1^4; true gap> e1:=1; 1 # again change b, again p-th power of a gap> b2:=b1/a1; [ [ Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ], [ 0*Z(3), Z(3), 0*Z(3), 0*Z(3) ], [ 0*Z(3), 0*Z(3), Z(3), 0*Z(3) ], [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3) ] ] gap> a2:=a1^2; [ [ Z(3), Z(3)^0, Z(3)^0, Z(3) ], [ 0*Z(3), Z(3), Z(3)^0, Z(3)^0 ], [ Z(3), 0*Z(3), Z(3), Z(3)^0 ], [ Z(3)^0, Z(3)^0, Z(3), 0*Z(3) ] ] # now order 4 gap> a1^2=b1^2; false gap> e2:=0; 0 gap> b3:=b2/a2^0; [ [ Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ], [ 0*Z(3), Z(3), 0*Z(3), 0*Z(3) ], [ 0*Z(3), 0*Z(3), Z(3), 0*Z(3) ], [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3) ] ] gap> a3:=a2^2; [ [ Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ], [ 0*Z(3), Z(3), 0*Z(3), 0*Z(3) ], [ 0*Z(3), 0*Z(3), Z(3), 0*Z(3) ], [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3) ] ] gap> a3^4=b3^4; true gap> e3:=1; 1 # we've found the digits of the exponent gap> e:=e0+2*e1+4*e2+8*e3; 11 gap> a^e=b; # test true Combine with Chinese remainder gap> ChineseRem([16,5],[11,3]); 43 gap> A^43=B; # test true