hdu 5833
来源:互联网 发布:plc编程指令大全 编辑:程序博客网 时间:2024/06/02 11:36
#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;#define maxn 105#define mod 1000000007int A[305][305];int num_prime,prime[400],f[2005];void getprime(){ for (int i=2;i<=2000;i++) f[i]=true; for (int i=2;i<=2000;i++) if (f[i]) { bool flag=true; for (int j=2;j*j<=i;j++) if (i % j==0 ) { flag=false; break; } if (flag) { prime[num_prime++]=i; int k=2; while (k*i<=2000) { f[k*i]=false; k++; } } }}inline int gauss(int r,int c){ int k,col,i,j,kk; int an; for(k=col=0;k<r&&col<c;k++,col++) { kk=k; for(i=k+1;i<r;i++) if(abs(A[i][col])>abs(A[kk][col])) kk=i; if(kk!=k) { for(j=col;j<=c;j++) swap(A[k][j],A[kk][j]); } if(A[k][col]==0) { k--; continue ; } for(i=k+1;i<r;i++) if(A[i][col]!=0) for(j=col;j<=c;j++) A[i][j]^=A[k][j]; } int ans=1; for (i=0;i<(c-k);i++) { ans=(ans*2)%mod; } return (ans-1+mod)%mod;}int main(){ int T,i,j,t,up,n; long long y; int Case=0; getprime(); scanf("%d",&T); while(T--) { scanf("%d",&n); t=0; memset(A,0,sizeof(A)); for (i=0;i<n;i++) { scanf("%I64d",&y); for (int j=0;j<num_prime;j++) { int k=0; while (y%prime[j]==0) { y=y/prime[j]; k++; } if (k%2==0) A[j][i]=0; else A[j][i]=1; } } t=num_prime; for (i=0;i<t;i++) { A[i][n]=0; } printf("Case #%d:\n",++Case); printf("%d\n",gauss(t,n)); } return 0;}
0 0
- HDU 5833
- HDU 5833
- HDU 5833
- hdu 5833
- HDU 5833 高斯消元
- HDU 5833 高斯消元
- HDU-5833-高斯消元
- HDU 5833 高斯消元
- (HDU)5833
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- moment.js--时间格式化处理利器
- Android跨包访问SharedPreferences空指针!
- 如何清除注册表中的Java安装信息
- 深入理解计算机系统--优化程序性能
- 在Python的虚拟环境中安装flask
- hdu 5833
- OpLog文件操作记录与权限控制组件
- Apache JMeter实现Trafodion并发测试
- Linux 打开文件件句柄数的问题
- windows下硬盘安装debian
- 密码显示隐藏符号格式会变
- hdu 5828
- Android进阶知识点(ViewPager,Fragment argument )
- LVS源码剖析-init