Problem:
Score : 200 points

Problem Statement

You are given a positive integer X.
Find the largest perfect power that is at most X.
Here, a perfect power is an integer that can be represented as b^p, where b is an integer not less than 1 and p is an integer not less than 2.

Constraints

1 ≤ X ≤ 1000

X is an integer.

Input

Input is given from Standard Input in the following format:

X

Output

Print the largest perfect power that is at most X.

Sample Input 1

10

Sample Output 1

9

There are four perfect powers that are at most 10: 1, 4, 8 and 9.
We should print the largest among them, 9.

Sample Input 2

1

Sample Output 2

1

Sample Input 3

999

Sample Output 3

961

Solution in C# (Mono 4.6.2.0) (judge verdict: Wrong Answer)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Practice
{
    class Program
    {
        private static int ReadAndParseInt()
        {
            return int.Parse(Console.ReadLine());
        }
        private static int[] ReadAndParseIntArr()
        {
            return Array.ConvertAll(Console.ReadLine().Split(' '), int.Parse);
        }
        private static long ReadAndParseLong()
        {
            return long.Parse(Console.ReadLine());
        }
        private static long[] ReadAndParseLongArr()
        {
            return Array.ConvertAll(Console.ReadLine().Split(' '), long.Parse);
        }
        static void Main(string[] args)
        {
            SolveA(args);
            //SolveB(args);
            //SolveC(args);
            //SolveD(args);


        }

        static void SolveA(string[] args)
        {
            int x = ReadAndParseInt();
            // 素数テーブル
            int[] primes = {  2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31 };

            // 1000以下のべき乗を事前計算
            var list = new List<int>() { 1 };
            //list.AddRange(primes);
            for(int i=0;i<primes.Length;++i)
            {
                int b = primes[i];
                int tmp = b;
                while (true)
                {
                    tmp *= b;
                    if (tmp <= 1000)
                    {
                        list.Add(tmp);
                    }
                    else
                    {
                        break;
                    }
                }
            }

            list.Sort();
            int max = 0;
            for(int i=list.Count-1;i>=0;--i)
            {
                if( list[i] <= x)
                {
                    max = list[i];
                    break;
                }
            }
            Console.WriteLine(max);
        }
    }
}