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 Java (OpenJDK 11.0.6) (judge verdict: Wrong Answer)


import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;



public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int X = sc.nextInt();
		Map<Long, Long> map = new TreeMap<Long, Long>();
		Main main = new Main();

		if (X >= 1 &&X <= 3) {
			System.out.println(1);
		}else {
			for (int i = X; i > 0; i--) {
				map.clear();
				main.factoring(map, i);

				if (map.size() == 1) {
					long sum = 0;
					for (Long l : map.keySet()) {
						sum+= map.get(l);
					}

					if ( sum >= 2) {
						System.out.println(i);
						break;
					}

				}

			}
		}





	}

	//Mapに渡すのでMain側で用意
	public void factoring(Map<Long, Long> factorMap, long num) {
		boolean isFactoringFlg = false;
		for (int i = 2; i <= Math.sqrt(num); i++) {
			if (num % i == 0) {
				if (factorMap.containsKey((long) i)) {
					factorMap.put((long) i, factorMap.get((long) i) + 1L);
				} else {
					factorMap.put((long) i, 1L);
				}
				num = num / i;
				isFactoringFlg = true;
				break;
			}
		}

		if (isFactoringFlg) {
			factoring(factorMap, num);
		} else {
			if (factorMap.containsKey(num)) {
				factorMap.put(num, factorMap.get(num) + 1L);
			} else {
				factorMap.put(num, 1L);
			}
		}
	}


}