Function: ispower
Section: number_theoretical
C-Name: ispower
Prototype: lGDGD&
Help: ispower(x,{k},{&n}): if k > 0 is given, return true (1) if x is a k-th
 power, false (0) if not. If k is omitted, return the maximal k >= 2 such
 that x = n^k is a perfect power, or 0 if no such k exist.
 If n is present, and the function returns a non-zero result, set n to the
 k-th root of x.
Description:
 (int):small       Z_isanypower($1, NULL)
 (int, &int):small Z_isanypower($1, &$2)
Doc: if $k$ is given, returns true (1) if $x$ is a $k$-th power, false
 (0) if not.

 If $k$ is omitted, only integers and fractions are allowed for $x$ and the
 function returns the maximal $k \geq 2$ such that $x = n^k$ is a perfect
 power, or 0 if no such $k$ exist; in particular \kbd{ispower(-1)},
 \kbd{ispower(0)}, and \kbd{ispower(1)} all return $0$.

 If a third argument $\&n$ is given and $x$ is indeed a $k$-th power, sets
 $n$ to a $k$-th root of $x$.

 \noindent For a \typ{FFELT} \kbd{x}, instead of omitting \kbd{k} (which is
 not allowed for this type), it may be natural to set
 \bprog
 k = (x.p ^ poldegree(x.pol) - 1) / fforder(x)
 @eprog
Variant: Also available is
 \fun{long}{gisanypower}{GEN x, GEN *pty} ($k$ omitted).
