######################################################################### # # this is the code of exercise 4.12.2 # ######################################################################## degblock := function( n, degne, dege, e, p ) local dd, d1, d2, de, tup, x; dd:= []; d1:= ShallowCopy( degne ); d2 := ShallowCopy( dege ); for x in [2..Length(d1)] do if d1[x] mod p <> d1[1] mod p then d1[x]:=-d1[x]; fi; od; for x in [2..Length(d2)] do if d2[x] mod p <> e then d2[x]:= -d2[x]; fi; od; tup := UnorderedTuples(d1, e);; for x in tup do if Sum(x) in d2 then Add( dd , [x, Sum(x)] ); fi; od; for x in dd do Sort( x[1] ); od; dd:=Set(dd); Sort(dd); dd:=Filtered(dd, x -> Sum(List(x[1], a -> a^2)) + ((p-1)/e)*x[2]^2 < n); dd:=Filtered(dd, x -> Length(Positions(x,1)) = 1); return(dd); end;;