Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

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?

share|improve this question
3  
Well, you could just use FactorInteger, for example. –  Leonid Shifrin Feb 13 at 22:05

2 Answers 2

up vote 3 down vote accepted

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.

share|improve this answer

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.

share|improve this answer
2  
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. –  Yi Wang Feb 14 at 7:56
    
Oh, you are right. Sneaky. Edited that correction in. –  evanb Feb 14 at 19:29

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.