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 Rust (1.42.0) (judge verdict: Accepted)

use proconio::{input, fastout};
use proconio::marker::{Chars};
use proconio::marker::Usize1;
use std::cmp::*;

macro_rules! debug {
      ($($a:expr),*) => {
          eprintln!(concat!($(stringify!($a), " = {:?}, "),*), $($a),*);
    }
}

#[fastout]
fn main() {
    input!{
        x: usize,
    }

    if x==1 {
        println!("{}", 1);
        return;
    }

    let mut ans: Vec<i64> = Vec::new();
    for b in 2..34 {
        for p in 2..11 {
            if (b as i64).pow(p) <= x as i64 {
                ans.push((b as i64).pow(p));
            }
        }
    }

    ans.sort();
    ans.reverse();
    println!("{}", ans[0]);

    // for i in (1..x+1).rev() {
    //     let mut tmp: Vec<usize> = vec![0;i+5];
    //     for j in 2..i+1 {
    //         let mut a = i;
    //         if i%j==0 {
    //             while a%j==0 {
    //                 tmp[j] += 1;
    //                 a /= j;
    //                 debug!(a);
    //             } 
    //         }
    //     }
    //     tmp.sort();
    //     tmp.reverse();
    //     debug!(tmp);
    //     let mut ok = false;
    //     if tmp[0]>=2 {
    //         ok = true;
    //         for k in 2..tmp.len() {
    //             if tmp[k]!=0 {
    //                 ok = false;
    //             }
    //         }
    //     }
    //     if ok {
    //         println!("{}", i);
    //         return;
    //     }
    // }

}