These functions represent just a possible solution to the exercise. EXERCISE 2 --------------------------- --------------------------- Point (1) --------------------------- PrimitiveRoot(a,n) = { my(primroot=0,nprimes=0); forprime(p=1,n, nprimes=nprimes+1; if(a%p!=0 && znorder(Mod(a,p))==p-1, primroot=primroot+1); ); return(primroot/nprimes*1.0); } --------------------------- Point (2) --------------------------- findIntersection( f1 , f2 ) = { subfieldsOfKPols = nfsubfields(f1); if(poldegree(f1) > poldegree(f2), return(findIntersection(f2, f1))); myAnswer = x; for(i=1, #subfieldsOfKPols, currentSubfieldPol = subfieldsOfKPols[i][1]; isSubfieldOfL = nfisincl(currentSubfieldPol, f2); if( #isSubfieldOfL != 0, myAnswer = currentSubfieldPol; ); ); return(myAnswer); } --------------------------- Point (3) --------------------------- SplittingType(K1,K2,n) = {forprime(p=1,n, v1=[]; v2=[]; dec1=idealprimedec(K1,p); dec2=idealprimedec(K2,p); for(i=1,#dec1,v1=concat(v1,[dec1[i].f])); for(i=1,#dec2,v2=concat(v2,[dec2[i].f])); print(p,vecsort(v1),vecsort(v2)); ); }