NB. Perfect powers NB. Integer logs and roots; work for extended precision. ilog=: <.@^. iroot=: <.@%: NB. 'x isEvenRoot y' is true if the xth root of y is an integer. isEvenRoot=: ] = iroot ^ [ NB. 'primesTo y' returns the primes up to the first prime >= y. primesTo=: 3 : 'p: i.>: _1 p: y' NB. Return a list of the prime powers that "factor" y. perfectPowersOf=: 3 : '(primesTo 2 ilog y) (isEvenRoot # [) y' NB. Just check if that list is longer than 0. isPerfectPower=: 3 : '0<#perfectPowersOf y'