Function: polrootsff
Section: number_theoretical
C-Name: polrootsff
Prototype: GDGDG
Help: polrootsff(x,{p},{a}): returns the roots of the polynomial x in the finite
 field F_p[X]/a(X)F_p[X]. a or p can be omitted if x has t_FFELT coefficients.
Doc: returns the vector of distinct roots of the polynomial $x$ in the field
 $\F_q$ defined by the irreducible polynomial $a$ over $\F_p$. The
 coefficients of $x$ must be operation-compatible with $\Z/p\Z$.
 Either $a$ or $p$ can omitted (in which case both are ignored) if x has
 \typ{FFELT} coefficients:
 \bprog
 ? polrootsff(x^2 + 1, 5, y^2+3)  \\ over F_5[y]/(y^2+3) ~ F_25
 %1 = [Mod(Mod(3, 5), Mod(1, 5)*y^2 + Mod(3, 5)),
       Mod(Mod(2, 5), Mod(1, 5)*y^2 + Mod(3, 5))]
 ? t = ffgen(y^2 + Mod(3,5), 't); \\ a generator for F_25 as a t_FFELT
 ? polrootsff(x^2 + 1)   \\ not enough information to determine the base field
  ***   at top-level: polrootsff(x^2+1)
  ***                 ^-----------------
  *** polrootsff: incorrect type in factorff.
 ? polrootsff(x^2 + t^0) \\ make sure one coeff. is a t_FFELT
 %3 = [3, 2]
 ? polrootsff(x^2 + t + 1)
 %4 = [2*t + 1, 3*t + 4]
 @eprog\noindent
 Notice that the second syntax is easier to use and much more readable.
