# mpz_perfect_power_p()

**Paul Leyland
**
pleyland@microsoft.com

*Mon, 11 Aug 2003 01:02:12 -0700*

>* Also, given that this function tells us that some candidate is a =
*perfect
>* power, can we then easily determine the value of that perfect power ? =
*I
>* guess not .... otherwise the function would surely return that value.
*
Surely, if you know that N =3D a^x with a not necessarily prime, it's =
then extremely easy to discover a and x with very little code and in a =
very short time. The obvious approach is to use Newton-Raphson to find =
the x-th root, b say, by successively trying x=3D2, x=3D3, ... x =3D =
floor(log_2(N)) until you find a value for which b^x=3DN.
When you have that you need only to factor b, if it's not prime. Unless =
N is excessively large, this ought to be straightforward.
Yes, I know that the search outlined above can be short-circuited. My =
point is that it's almost always very easy to factor N given that it's a =
perfect power.
Paul