#include <iostream>
#include <map>
#include <vector>
#include <set>
#define llint long long

using namespace std;

llint N;
llint a[100005];
vector<llint> vec;
map<llint, llint> mp;
set<llint> s;

llint anticube(llint x)
{
	llint c;
	for(llint i = 2; i <= 2500; i++){
		c = i*i*i;
		if(x < c) break;
		while(x % c == 0) x /= c;
	}
	return x;
}

int main(void)
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	cin >> N;
	for(int i = 1; i <= N; i++) cin >> a[i];
	for(int i = 1; i <= N; i++) a[i] = anticube(a[i]);
	
	for(int i = 1; i <= N; i++) mp[a[i]]++;
	
	llint ans = 0;
	for(auto it = mp.begin(); it != mp.end(); it++){
		if(it->first == 1){
			ans++;
			continue;
		}
		if(s.count(it->first)) continue;
		llint inv = anticube(it->first * it->first);
		ans += max(it->second, mp[inv]);
		s.insert(inv);
	}
	cout << ans << endl;
	
	return 0;
}