#include<bits/stdc++.h>
using namespace std;
#define nn 3003
#define ll long long
vector<ll> ps;int isp[nn];
void ini()
{
	for(int i=2;i<nn;i++)
	{
		if(!isp[i]) ps.push_back(i);
		for(int j=i+i;j<nn;j+=i) isp[j]=1;
	}
}

ll iss(ll n)
{
	ll t=sqrt(n);
	for(ll i=t-2;i<=t+2;i++) if(i>0)if(i*i==n) return i;
	return 0;
}

map<ll,ll> m,rev;ll cnt1;
void solve(ll n)
{
	if(n==1) 
	{
		cnt1++;
		return ;
	}
	ll nr=1,rr=1;ll cn=n;
	for(int i=0;i<ps.size();i++)
	{
		ll p=ps[i];
		if(n%p==0)
		{
			ll cnt=0;
			while(n%p==0) n/=p,cnt++;
			cnt%=3;
			if(cnt==0) continue;
			if(cnt==1) nr=nr*p,rr=rr*p*p;
			else nr=nr*p*p,rr=rr*p;
		}
	}
	ll tp=iss(n);
	if(tp)
		nr=nr*n,rr=rr*tp;
	else
		nr=nr*n,rr=rr*n*n;
	if(nr==1)
	{
		cnt1++;
		return ;
	}

	rev[nr]=rr,m[nr]++;
}
int main()
{
	ini();
	int n;scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		ll x;scanf("%lld",&x);
		solve(x);
	}
	ll ans=0;
	for(map<ll,ll>::iterator it=m.begin();it!=m.end();it++)
	{
		ll rr=rev[it->first];
		if(m.count(rr))
			ans+=max(it->second,m[rr]),it->second=m[rr]=0;
		else ans+=it->second,it->second=0;
	}
	cout<<ans+(cnt1>0);
	return 0;
} 
