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

gap> #########################################
gap> fn:=function(x);
> if IsRat(x) then return x; fi;
> return x!.rational+x!.irrational*Sqrt(-1);
> 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)
> local I, G, A, T, S, F;
> I:=QuadraticIdeal(OQ,x);
> G:=HAP_CongruenceSubgroupGamma0(I);;
> A:=AbelianInvariants(G);
> T:=Filtered(A,x->not x=0);
> return [Norm(Q,x),1.0*Log(Product(T),10)/(Loge*Norm(I))];
> end;
gap> #########################################

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