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 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int comparator(const void *p, const void *q)
{
    int l = *(const int *)p;
    int r = *(const int *)q;

    return (l - r);
}
int main()
{
    int x, i, j, v[1000], k = 0;
    scanf("%d", &x);
    if(sqrt(x) == (int)sqrt(x))
    {
        printf("%d", x);
        return 0;
    }
    if(pow(10, 3) == x)
        {
            printf("%.0lf", pow(10, 3));
            return 0;
        }
    v[k ++] = 1;
    for(i = 31; i >= 11; i --)
        v[k ++] = pow(i, 2);

    for(j = 3; j >= 2; j --)
        for(i = 9; i >= 6; i --)
            v[k ++] = pow(i, j);

    for(j = 4; j >= 2; j --)
        for(i = 5; i >= 4; i --)
            v[k ++] = pow(i, j);

    for(j = 6; j >= 2; j --)
        v[k ++] = pow(3, j);

    for(j = 9; j >= 2; j --)
        v[k ++] = pow(2, j);

    qsort((void*)v, k - 1, sizeof(int), comparator);
    k --;
    while(v[k] > x)
        k --;
    printf("%d", v[k]);
    return 0;
}