标签:
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=5833
思路:
将每个数质因数分解,若该位质因数指数为偶数,则该位a[i]为0,否则该位a[i]为1(记a[i]为质因数分解后第i个质数所对应值)。
合法方案为积的各位质因子个数对应值a[i]异或值为0。
例3=3^1,4=2^2,则3*3*4对应:
2 3
0 (1 xor 1=0)
则可列方程组
a11x1+a12x2+...+a1nxn=0
a21x1+a22x2+...+a2nxn=0
...
an1x1+an2x2+...+annxn=0
a[i][j]表示第i个质数在第j个数所对应值(奇数个为1,偶数个为0)。
x[i]表示是否选择数字i,若选择为1,否则为0。
则ans=2^(n-r)-1(r为自由变量个数,减一表示不能全为0)
#include<queue> #include<cstdio> #include<vector> #include<cstring> #include<iostream> #include<algorithm> #define debu using namespace std; typedef long long LL; const int maxn=350; const int maxp=350; const int maxx=2000; const int mod=1e9+7; struct Matrix { int f[maxn][maxn]; }; Matrix e; int v[maxx]; int n,m,q,k; int a[maxn][maxp]; vector<int> prime; int Guass(Matrix a,int n,int m) { int i=1,j=1,k,r,u; while(i<=n&&j<=m) { r=i; for(k=i; k<=n; k++) if(a.f[k][j]) { r=k; break; } if(a.f[r][j]) { if(r!=i) for(k=0; k<=m+1; k++) swap(a.f[r][k],a.f[i][k]); for(u=i+1; u<=n; u++) if(a.f[u][j]) for(k=i; k<=m+1; k++) a.f[u][k]^=a.f[i][k]; i++; } j++; } for(u=i; u<=n; u++) if(a.f[u][m+1]) return -1; return i-1; } void prepare() { for(int i=2; i<maxx; i++) { if(!v[i]) { prime.push_back(i); for(int j=i*i; j<maxx; j+=i) v[j]=1; } } } void change(int id,LL x) { for(int i=0; i<prime.size(); i++) { while(x%prime[i]==0) { a[id][i+1]++; x/=prime[i]; a[id][i+1]%=2; } } } LL pow_mod(LL a,LL b,LL mod) { LL t=1,y=a; while(b) { if(b&1) t=(t*y)%mod; y=(y*y)%mod; b>>=1; } return t; } int main() { #ifdef debug freopen("in.in","r",stdin); #endif // debug int t,cas=0; scanf("%d",&t); prepare(); while(t--) { memset(a,0,sizeof(a)); printf("Case #%d:\n",++cas); scanf("%d",&n); for(int i=1; i<=n; i++) { LL x; scanf("%I64d",&x); change(i,x); } memset(e.f,0,sizeof(e.f)); for(int i=0; i<prime.size(); i++) for(int j=1; j<=n; j++) e.f[i+1][j]=a[j][i+1]; for(int i=0; i<prime.size(); i++) e.f[i+1][n+1]=0; int r=Guass(e,prime.size(),n); if(r==-1) printf("0\n"); else printf("%I64d\n",pow_mod(2,n-r,mod)-1); } return 0; }
Hdu 5833 Zhu and 772002(高斯消元解异或方程组)
标签:
原文地址:http://blog.csdn.net/wang2147483647/article/details/52224509