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;}

原创粉丝点击