从数组中选择几个数,要求他们的乘积可以开平方,问有多少种方案。

先将单个数拆分成质因子,对于这个数而言,那些指数为奇数的质因子会使这个数无法被开平方。

所以我们需要选择一个对应质因子指数为奇数的元素,将他们两个放在一个方案中,但是又有可能会引入其他的质因子。

这样就变成了求解行列式中自由变元的数量问题。

将数组转换成行列式,利用高斯消元求解。

代码如下:

#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std; bool pri[];
int a[][];
int max_;
int t, n;
long long x;
vector<int>V; void Prime(){
memset(pri,,sizeof(pri));
pri[] = pri[] = ;
for(int i=;i<;i++)if(pri[i]){
V.push_back(i);//对素数离散一下 优化一下
for(int j=i<<;j<;j+=i)
pri[i] = ;
}
}
void init(){
memset(a,,sizeof(a));
max_ = ;
}
int gauss(){// 高斯消元
int i = , j = ;
while(i<=max_ && j<n){
int k = i;
for(;k<=max_;k++)
if(a[k][j])break;
if(k != max_ + ){
for(int l=;l<n;l++){
// 第j个等式的 k位上为 1
// 将第 k 行与第 i 行 进行 行交换
swap(a[i][l],a[k][l]);
}
for(int k=i+;k<=max_;k++){
if(a[k][j]){
for(int l=j;l<n;l++)
a[k][l] ^= a[i][l];// 这里是优化后的式子
}
}
i++;
}
j++;
}
return n-i;
}
int main(){
Prime();
scanf("%d",&t);
while(t--){
init();
scanf("%d",&n);
for(int i=;i<n;i++){
scanf("%lld",&x);
for(int j=;j<V.size() && V[j]<= x;j++){
while(x%V[j] == ){
a[j][i] ^= ;
// 若 质因子的指数为偶数 则行列式对应位上为 0
// 奇数 为 1
max_ = max(max_, j);
// 记录一下最大值, 优化
x /= V[j];
}
}
}
printf("%lld\n",(1ll<<gauss())-);
}
return ;
}

UVA 11542 高斯消元的更多相关文章

  1. UVa 11542 (高斯消元 异或方程组) Square

    书上分析的太清楚,我都懒得写题解了.=_=|| #include <cstdio> #include <cstring> #include <cmath> #inc ...

  2. uva 10828 高斯消元求数学期望

    Back to Kernighan-RitchieInput: Standard Input Output: Standard Output You must have heard the name ...

  3. UVA 11542 - Square(高斯消元)

    UVA 11542 - Square 题目链接 题意:给定一些数字.保证这些数字质因子不会超过500,求这些数字中选出几个,乘积为全然平方数,问有几种选法 思路:对每一个数字分解成质因子后.发现假设要 ...

  4. UVa 11542 Square (高斯消元)

    题意:给定 n 个数,从中选出一个,或者是多个,使得选出的整数的乘积是完全平方数,求一共有多少种选法,整数的素因子不大于 500. 析:从题目素因子不超过 500,就知道要把每个数进行分解.因为结果要 ...

  5. UVA 10828 - Back to Kernighan-Ritchie(概率+高斯消元)

    UVA 10828 - Back to Kernighan-Ritchie 题目链接 题意:给图一个流程图,有结点的流程,每次进入下一个流程概率是均等的,有q次询问,求出每次询问结点的运行期望 思路: ...

  6. uva 1560 - Extended Lights Out(枚举 | 高斯消元)

    题目链接:uva 1560 - Extended Lights Out 题目大意:给定一个5∗6的矩阵,每一个位置上有一个灯和开关,初始矩阵表示灯的亮暗情况,假设按了这个位置的开关,将会导致周围包含自 ...

  7. uva 10808 - Rational Resistors(基尔霍夫定律+高斯消元)

    题目链接:uva 10808 - Rational Resistors 题目大意:给出一个博阿含n个节点,m条导线的电阻网络,求节点a和b之间的等效电阻. 解题思路:基尔霍夫定律,不论什么一点的电流向 ...

  8. UVA 1397 - The Teacher&#39;s Side of Math(高斯消元)

    UVA 1397 - The Teacher's Side of Math 题目链接 题意:给定一个x=a1/m+b1/n.求原方程组 思路:因为m*n最多20,全部最高项仅仅有20.然后能够把每一个 ...

  9. UVA 1564 - Widget Factory(高斯消元)

    UVA 1564 - Widget Factory 题目链接 题意:n种零件, 给定m个制作时间.每段时间制作k个零件,每种零件有一个制作时间,每段时间用Mon到Sun表示,求每一个零件的制作时间.还 ...

随机推荐

  1. 闲话缓存:ZFS 读缓存深入研究-ARC(一)

    在Solaris ZFS 中实现的ARC(Adjustable Replacement Cache)读缓存淘汰算法真是很有意义的一块软件代码.它是基于IBM的Megiddo和Modha提出的ARC(A ...

  2. CSP 试题编号201803-2 Java实现

    package HB; import java.util.Scanner; public class Test_06 { public static void main(String[] args) ...

  3. vue.js 使用记录(1)

    1,for循环 <li @click="toService(type, index)" v-for="(type,index) in typeList" ...

  4. linux利用sh脚本上传下载文件到ftp服务器

    ####本地的/app/awsm/csv2 to ftp服务器上的/awsm/#### #!/bin/sh export today=`date +%Y-%m-%d` ftp -v -n 10.116 ...

  5. JavaScript日期格式转换

    //日期格式转换 function dateFormat(val) {//val需要转换的日期 var fmt = "yyyy-MM-dd";//日期格式 val = val.re ...

  6. HTML5视频播放练习:鼠标经过视频播放,鼠标移除停止播放,再次经过继续播放。

    随着HTML5的广泛应用,在一些网站中,经常看到有些预览的短视频预览,鼠标经过就会播放,移除就会停止播放,再次移进去就会继续播放. 自己也研究着做一个比较简单的类似的练习. 视频可以自己到包图网下载, ...

  7. 初次使用vue-cli3 来搭建项目

    1,细数项目中使用的技术:vue, vue-router, vuex ,axios,vue-cli3, 快速建站. 2,mock技术使用的express-mockjs . 由于cli3 最新版的话缺少 ...

  8. 针对shiro框架authc拦截器认证成功后跳转到根目录,而非指定路径问题

    一.针对shiro框架authc拦截器认证成功后跳转到根目录,而非指定路径问题 首先,我们先来了解一下authc登录拦截器工作原理 authc拦截器有2个作用: 1>登录认证     请求进来时 ...

  9. centos7 关闭防火墙

    centos7 关闭防火墙 1.firewall相关的操作    查看防火墙状态 firewall-cmd    --state 关闭防火墙 systemctl  stop   firewalld.s ...

  10. linux不重启挂载磁盘安装grub

    挂载.分区.grub 通过给一块新磁盘安装grub回顾磁盘挂载.分区文件系统创建等操作: 该实验基于(CtonOS6.8:kernel:2.6.32-642.15.1.el6.x86_64) 1.通过 ...