#include<cstdio>
#include<cmath>
#include<map>
using namespace std;
const int N=100005;
int n,ans,p[1005];
long long x,z,t,k,a[N],b[N];
bool bz[N];
map<long long,int>sum;
map<long long,bool>bo;
int main()
{
	scanf("%d",&n);
	for (int i=2;i<=2155;i++)
	{
		if (!bz[i]) p[++p[0]]=i;
		for (int j=1;j<=p[0] && i*p[j]<=2155;j++)
		{
			bz[i*p[j]]=1;
			if (i%p[j]==0) break;
		}
	}
	for (int i=1;i<=n;i++)
	{
		scanf("%lld",&x),a[i]=b[i]=1;
		for (int j=1;j<=p[0];j++)
		if (x%p[j]==0)
		{
			t=0;
			while (x%p[j]==0) t++,x/=p[j];
			t%=3,k=(3-t)%3;
			for (int ii=1;ii<=t;ii++) a[i]*=p[j];
			for (int ii=1;ii<=k;ii++) b[i]*=p[j];
		}
		if (x>1) 
		{
			z=sqrt(x);
			if (z*z==x) t=2; else z=x,t=1;
			t%=3,k=(3-t)%3;
			for (int ii=1;ii<=t;ii++) a[i]*=z;
			for (int ii=1;ii<=k;ii++) b[i]*=z;
		}
	}
	for (int i=1;i<=n;i++) sum[a[i]]++;
	for (int i=1;i<=n;i++)
	if (!bo[a[i]])
	{
		bo[a[i]]=1;
		if (a[i]==b[i]) ans++;
		else
		{
			ans+=max(sum[a[i]],sum[b[i]]);
			bo[b[i]]=1;
		}
	}
	printf("%d",ans);
	return 0;
}
