Poly invmodxn(const Poly& a,int n) { // Newton's method to find 1/a mod x^n int i,k; Poly b; k=0; while ((1<<k)<n) k++; b.addterm((ZZn)1/a.coeff(0),0); // important that a0 != 0 for (i=1;i<=k;i++) b=modxn (2*b-a*b*b,1<<i); b=modxn(b,n); return b; }
BOOL isone(const Poly& p) { if (degree(p)==0 && p.coeff(0)==1) return TRUE; else return FALSE; }