UVA 11542 - Square
来源:互联网 发布:数学模型方法与算法 编辑:程序博客网 时间:2024/05/21 15:40
#include <iostream>#include <cstdio>#include <cstring>#include <vector>#include <set>#include <map>#include <queue>#include <list>#include <deque>#include <bitset>using namespace std;typedef long long LL;const int maxn = 511;bitset<maxn+10>vis;int p[maxn],size;void init(){ int i,j; for(i=2;i*i<=maxn;++i) if(!vis[i]) for(j=i*i;j<=maxn;vis[j]=true,j+=i); for(i=2;i<maxn;++i) if(!vis[i]) p[size++]=i; // cout<<size<<endl;}bool a[111][111];void spilt(LL n,bool a[]){ int i; for(i=0;i<size;++i) { while(n%p[i]==0) { a[i]^=true; n/=p[i]; } }}LL Det(int n){ int i,j,k,t; int cnt=0; for(i=0;i<n;++i) { for(j=0;j<size&&!a[i][j];++j); if(j>=size) { ++cnt; continue; } for(t=i+1;t<n;++t) { if(a[t][j]) { for(k=0;k<size;++k) { a[t][k]^=a[i][k]; } } } } return (1ll<<cnt)-1;}int main(){ init(); ios::sync_with_stdio(false); int T,n,i; LL k; cin>>T; while(T--) { memset(a,false,sizeof(a)); cin>>n; for(i=0;i<n;++i) { cin>>k; spilt(k,a[i]); } cout<<Det(n)<<endl; } return 0;}