Annegret Weng on Mon, 19 Jun 2000 22:02:53 -0400 (EDT) |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
rnfisnorm |
Hello! I have a problem with the function "rnfisnorm". It seems that I do not know how to work with it. I wrote a C++-program using Pari (see below) but I get an error. The program should do the following: Given a rational prime p (as an element of a numberfield generated by y^3+b1*y^2+b2*y+b3), determine wheter p is a relative norm in a field extension defined by x^2+Mod(a2*y^2+a1*y+a0,y^3+b1*y^2+b2*y+b3). I entered for example b1=1, b2=-2 and b3=-1 and then a2=1, a1=2 and a0=1 and p=17. I got the error *** incorrect type in principalideal. *** Error in the PARI system. End of program. Where is my mistake? Thank you very much for every advice! Best regards, Annegret My program: #include<iostream.h> extern "C" { #include<pari/pari.h> } int main() { pari_init(100000000,2); long prec=DEFAULTPREC; long b1,b2,b3; long a0,a1,a2; const long vy=fetch_user_var("y"); const long vx=0; GEN y=polx[vy];//Variable for number field GEN x=polx[vx];//Variable for relative extension GEN polynom1;//Polynomial for the number field GEN polynom2;//Polynomial for the relative extension long ltop; cout << "Enter a polynomial of degree 3!" << endl; cout << "First the coefficient of x^2, then x, then x^0:"<< endl; cin >> b1; cin >> b2; cin >> b3; //Polynomial defining the ground field of degree 3: //y^3+b1*y^2+b2*y+b3 polynom1=gadd(gmul(y,gsqr(y)),gmulsg(b1,gsqr(y))); polynom1=gaddsg(b3,gadd(polynom1, gmulsg(b2,y))); cout <<"Please enter an element alpha in Z[y]" << endl; cout <<"such that alpha=a0+a1w+a2w^2." << endl; cin >> a0; cin >> a1; cin >> a2; ltop=avma; //Polynomial defining the relative extension: //x^2+Mod(a2*y^2+a1*y+a0,y^3+b1*y^2+b2*y+b3) GEN puffer=gmodulcp(gaddsg(a0,gmul(y,gaddsg(a1,gmulsg(a2,y)))),polynom1); polynom2=gerepileupto(ltop,gadd(gsqr(x),puffer)); //Numberfield defined by y^3+b1*y^2+b2*y+b3 GEN bnf=bnfinit0(polynom1,0,NULL,prec); //Producing the parameters required by rnfisnorm: GEN yinx=rnfequation0(bnf,polynom2,1); //ext required for rnfisnorm: GEN ext=cgetg(4,t_VEC); ext[1]=(long) polynom2; ext[2]=rnfequation0(bnf,polynom2,1)[2]; ext[3]=(long) bnfinit0((GEN) yinx[1],0,NULL,prec); //The prime p which we want to satisfy a relative norm equation: long p; cout<<"Enter a rational prime p!" << endl; cin >> p; GEN element=algtobasis(bnf,stoi(p)); output(rnfisnorm(bnf,ext,element,100,prec)); }