LightOJ 1288(01高斯消元、矩阵的秩)
来源:互联网 发布:历城二中 知乎 编辑:程序博客网 时间:2024/05/16 18:48
给你n个数 选出一些数 他们的乘积是完全平方数 求有多少种方案
每个数分解因子 每隔数可以选也可以不选 0 1表示 然后设有m种素数因子 选出的数组成的各个因子的数量必须是偶数
组成一个m行和n列的矩阵 每一行代表每一种因子的系数 解出自由元的数量
#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <iostream>using namespace std;const int MAXN = 1010;const int mod = 1000000007;typedef int Matrix[MAXN][MAXN];typedef long long LL;int prime[MAXN];bool is_prime[MAXN];int tol;Matrix a;LL pow_mod(LL a, LL p, LL n){ LL ans = 1; while(p) { if(p&1) { ans *= a; ans %= n; } a *= a; a %= n; p >>= 1; } return ans;}void find_prime(){ memset(is_prime,false,sizeof(is_prime)); tol=0; is_prime[1]=1; for(int i=2; i<MAXN; i++) { if(!is_prime[i]) prime[tol++]=i; if(!is_prime[i]) { for(int j=i*2; j<MAXN; j+=i) is_prime[j]=1; } }}int Gauss(int equ, int var){ int max_r,col,k; for(k=0,col=0;k<equ&&col<var;k++,col++) { max_r=k; for(int i=k+1;i<equ;i++) { if(abs(a[i][col])>abs(a[max_r][col])) max_r=i; } if(a[max_r][col]==0) { k--; continue; } if(max_r!=k) { for(int j=col;j<var+1;j++) { swap(a[k][j],a[max_r][j]); } } for(int i=k+1;i<equ;i++) { if(a[i][col]!=0) { for(int j=col;j<var+1;j++) { a[i][j]^=a[k][j]; } } } } return var-k;}int main(){// freopen("in.txt","r",stdin);// freopen("out.txt","w",stdout); find_prime(); int T; cin>>T; for(int cas=1; cas<=T; cas++) { memset(a,0,sizeof(a)); int n; cin>>n; int var=0; for(int i=0; i<n; i++) { LL x; cin>>x; for(int j=0; j<tol&&x>=prime[j]; j++) { while(x%prime[j]==0) { var=max(var,j+1); x/=prime[j]; a[j][i]^=1; } } } int rk=Gauss(var,n); printf("Case %d: %lld\n",cas,pow_mod(2,rk,mod)-1); } return 0;}
0 0
- LightOJ 1288(01高斯消元、矩阵的秩)
- LightOJ 1070 Algebraic Problem (推导+矩阵快速幂)
- LightOj 1268 Unlucky Strings (KMP+矩阵快速幂)
- LightOJ 1065 Number Sequence(矩阵快速幂)
- LightOj 1006 Hex-a-bonacci(矩阵快速幂)
- 【LightOJ】1006 - Hex-a-bonacci(矩阵快速幂)
- Lightoj 1070 Algebraic Problem(矩阵快速幂)
- lightoj 1052 - String Growth 矩阵
- lightOj 1132(矩阵快速幂)
- LightOj 1332 矩阵快速幂
- lightoj 1006 矩阵快速幂
- LightOj 1006(矩阵快速幂)
- lightoj 1052 矩阵快速幂
- LightOJ-1052-矩阵快速幂
- 关于矩阵的一些操作(求转置矩阵、行列式、矩阵的秩、矩阵的逆矩阵、两个矩阵的乘积矩阵)
- 关于矩阵的一些操作(求转置矩阵、行列式、矩阵的秩、矩阵的逆矩阵、两个矩阵的乘积矩阵)
- LightOJ 1132 Summing up Powers(矩阵快速幂+二项式定理)
- LightOJ 1052 String Growth(数学递推+矩阵快速幂求斐波拉契数列)
- C++中的static关键字
- Android Studio 打包、生成jks密钥、签名Apk、多渠道打包
- assign vs weak, __block vs __weak
- 关于大小端问题和字节序问题的一些总结
- 设计模式之---备忘录模式
- LightOJ 1288(01高斯消元、矩阵的秩)
- 创建型模式之工厂方法模式
- faial: refusing to merge unrelated histories
- Gartner:当商业智能成熟度低时,如何加快分析采用率
- 【深度学习论文】Fast-RCNN
- 3. Longest Substring Without Repeating Characters
- 医疗行业专业术语知识
- jQuery常用正则表达式
- 【深度学习论文】Faster-RCNN