https://www.luogu.com.cn/record/75605992
看了题解,和题解解法一样。
#include<iostream>
#include<cstdio>
#define int long long
#define M 1000000007
using namespace std;
int n,a,ans=1,xxj[20],pn=19,p[20]={0,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67};
bool insert(int x)
{
for(int i=pn;i>=1;i--)
{
if((x&(1<<i))==0) continue;
if(xxj[i]==0)
return (xxj[i]=x),1;
x^=(1<<i);
}
return 0;
}
signed main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
int x;
a=0;
cin>>x;
for(int j=1;j<=pn;j++)
{
while(x%p[j]==0)
x/=p[j],a^=(1<<j);
}
if(!insert(a)) ans=ans*2%M;
}
cout<<ans-1;
return 0;
}