# Checking if a number is a perfect power

I wanted to know how would I use Mathematica in order to check if the number is a perfect power I saw the algorithm but couldn't grasp it enough to implement it, so can anybody help?

• Well, you could just use FactorInteger, for example. Feb 13, 2014 at 22:05

The function below returns the power of n.

power[n_] := GCD @@ (FactorInteger[n][[All, 2]])


example:

power[3111696]


returns 4 because3111696=2^4*3^4*7^4

If you deal with very large numbers where FactorInteger simply can't help, you could use trial exponents IntegerQ[n^(1/m)] for m=2,3,4,.... Where to stop (I mean m) depends on the length of the number.

Inspired by tchronis's answer and Leonid's comment I came up with

powers[int_] := FactorInteger[int][[All, 2]]
perfectPowerQ[int_] := (GCD @@ powers[int] > 1)


powers tells you what powers the prime factors are raised to to get the required number while perfectPowerQ checks that all these powers are the same.

• I think you have to use GCD as in @tchronis's answer (GCD@@[powers[int]]>1). Those factors do not have to be the same. For example, perfectPowerQ[144] gives False using your code. Feb 14, 2014 at 7:56
• Oh, you are right. Sneaky. Edited that correction in. Feb 14, 2014 at 19:29