description: Polycarp likes squares and cubes of positive integers. Here is the beginning of the sequence of numbers he likes: 1, 4, 8, 9, ....
  
  For a given number n, count the number of integers from 1 to n that Polycarp likes. In other words, find the number of such x that x is a square of a positive integer number or a cube of a positive integer number (or both a square and a cube simultaneously).
  
  Input
  
  The first line contains an integer t (1 ≤ t ≤ 20) — the number of test cases.
  
  Then t lines contain the test cases, one per line. Each of the lines contains one integer n (1 ≤ n ≤ 10^9).
  
  Output
  
  For each test case, print the answer you are looking for — the number of integers from 1 to n that Polycarp likes.
  
  Example
  
  Input
  
  
  6
  10
  1
  25
  1000000000
  999999999
  500000000
  
  
  Output
  
  
  4
  1
  6
  32591
  32590
  23125
solution: import java.util.*;
  import java.io.*;
  
  public class Solution {
  
  	static int mod = 1000000007;
  
  	public static void main(String[] args) {
  		FastScanner fs = new FastScanner();
  		int t = fs.nextInt();
  		while (t-- > 0) {
  			int n = fs.nextInt();
  			HashSet<Integer> set = new HashSet<>();
  
  			int i = 1;
  			while (i * i <= n) {
  				set.add(i * i);
  				i++;
  			}
  
  			i = 1;
  			while (i * i * i <= n) {
  				set.add(i * i * i);
  				i++;
  			}
  
  			System.out.println(set.size());
  		}
  	}
  
  	static boolean isPrime(int n) {
  		if (n <= 1)
  			return false;
  		else if (n == 2)
  			return true;
  
  		else if (n % 2 == 0)
  			return false;
  
  		for (int i = 3; i <= Math.sqrt(n); i += 2) {
  			if (n % i == 0)
  				return false;
  		}
  		return true;
  	}
  
  	static int gcd(int a, int b) {
  		if (b == 0)
  			return a;
  		return gcd(b, a % b);
  	}
  
  	static long gcd(long a, long b) {
  		if (b == 0)
  			return a;
  		return gcd(b, a % b);
  	}
  
  	static void sort(int[] a) {
  		// suffle
  		int n = a.length;
  		Random r = new Random();
  		for (int i = 0; i < a.length; i++) {
  			int oi = r.nextInt(n);
  			int temp = a[i];
  			a[i] = a[oi];
  			a[oi] = temp;
  		}
  
  		// then sort
  		Arrays.sort(a);
  	}
  
  	// Use this to input code since it is faster than a Scanner
  	static class FastScanner {
  		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  		StringTokenizer st = new StringTokenizer("");
  
  		String next() {
  			while (!st.hasMoreTokens())
  				try {
  					st = new StringTokenizer(br.readLine());
  				} catch (IOException e) {
  					e.printStackTrace();
  				}
  			return st.nextToken();
  		}
  
  		int nextInt() {
  			return Integer.parseInt(next());
  		}
  
  		int[] readArray(int n) {
  			int[] a = new int[n];
  			for (int i = 0; i < n; i++)
  				a[i] = nextInt();
  			return a;
  		}
  
  		long nextLong() {
  			return Long.parseLong(next());
  		}
  
  		double nextDouble() {
  			return Double.parseDouble(next());
  		}
  
  		ArrayList<Integer> readList(int n) {
  			ArrayList<Integer> list = new ArrayList<>();
  			for (int i = 0; i < n; i++)
  				list.add(nextInt());
  			return list;
  		}
  	}
  
  }
  