gap> Q:=QuadraticNumberField(-1);;
gap> OQ:=RingOfIntegers(Q);;
gap> N:=QuadraticIntegersByNorm(OQ,20000);;

gap> #########################################
gap> fn:=function(x);
gap> if IsRat(x) then return x; fi;
gap> return x!.rational+x!.irrational*Sqrt(-1);
gap> end;
gap> #########################################

gap> NN:=List(N,fn);
gap> P:=Filtered(NN,x->IsPrime(QuadraticIdeal(OQ,x)));
gap> PP:=Classify(P,x->Norm(Q,x));
gap> PP:=List(PP,x->x[1]);;
gap> PP:=Filtered(PP,x->not x=0);

gap> Loge:=0.434294481903;; ###Log_10(e)
gap> #########################################
gap> ffn:=function(x)
gap> local I, G, A, S, F;
gap> I:=QuadraticIdeal(OQ,x);
gap> G:=HAP_CongruenceSubgroupGamma0(I);;
gap> A:=AbelianInvariants(G);
gap> A:=Filtered(A,x->not x=0);
gap> return [Norm(Q,x),1.0*Log(Product(Filtered(AbelianInvariants(G),i->not i=0)),10)/(Loge*Norm(I))];
gap> end;
gap> #########################################

gap> S:=List(PP{[9..267]},ffn);
gap> ScatterPlot(S);
