UVA 11542 - Square(高斯消元)
UVA 11542 - Square
题意:给定一些数字。保证这些数字质因子不会超过500,求这些数字中选出几个,乘积为全然平方数,问有几种选法
思路:对每一个数字分解成质因子后。发现假设要是全然平方数,选出来的数字的每一个质因子个数都必定要是偶数,这样每一个质因子能够列出一个异或的方程,假设数字包括质因子,就是有这个未知数,然后进行高斯消元,求出自由变量的个数,每一个自由变量能够选或不选。这种情况就是(2^个数),然后在扣掉什么都不选的1种就是答案了
代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; const long long N = 501; int t, n, a[N][N], Max, vis[N], pn = 0;
long long prime[N]; void get_prime() {
for (long long i = 2; i < N; i++) {
if (vis[i]) continue;
prime[pn++] = i;
for (long long j = i * i; j < N; j += i)
vis[j] = 1;
}
} int gauss() {
int i = 0, j = 0;
while (i <= Max && j < n) {
int k = i;
for (; k <= Max; k++)
if (a[k][j]) break;
if (k != Max + 1) {
for (int l = 0; l <= n; l++)
swap(a[i][l], a[k][l]);
for (int k = i + 1; 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() {
get_prime();
scanf("%d", &t);
while (t--) {
scanf("%d", &n);
long long x;
Max = 0;
memset(a, 0, sizeof(a));
for (int i = 0; i < n; i++) {
scanf("%lld", &x);
for (int j = 0; j < pn && prime[j] <= x; j++) {
while (x % prime[j] == 0) {
a[j][i] ^= 1;
Max = max(Max, j);
x /= prime[j];
}
}
}
printf("%lld\n", (1LL<<(gauss())) - 1);
}
return 0;
}
UVA 11542 - Square(高斯消元)的更多相关文章
- UVa 11542 Square (高斯消元)
题意:给定 n 个数,从中选出一个,或者是多个,使得选出的整数的乘积是完全平方数,求一共有多少种选法,整数的素因子不大于 500. 析:从题目素因子不超过 500,就知道要把每个数进行分解.因为结果要 ...
- UVA 11542 Square 高斯消元 异或方程组求解
题目链接:点击打开链接 白书的例题练练手. . . P161 #include <cstdio> #include <iostream> #include <algori ...
- UVA11542 Square(高斯消元 异或方程组)
建立方程组消元,结果为2 ^(自由变元的个数) - 1 采用高斯消元求矩阵的秩 方法一: #include<cstdio> #include<iostream> #includ ...
- UVA 1563 - SETI (高斯消元+逆元)
UVA 1563 - SETI option=com_onlinejudge&Itemid=8&page=show_problem&category=520&probl ...
- UVA 11542 高斯消元
从数组中选择几个数,要求他们的乘积可以开平方,问有多少种方案. 先将单个数拆分成质因子,对于这个数而言,那些指数为奇数的质因子会使这个数无法被开平方. 所以我们需要选择一个对应质因子指数为奇数的元素, ...
- UVA 10828 - Back to Kernighan-Ritchie(概率+高斯消元)
UVA 10828 - Back to Kernighan-Ritchie 题目链接 题意:给图一个流程图,有结点的流程,每次进入下一个流程概率是均等的,有q次询问,求出每次询问结点的运行期望 思路: ...
- uva 1560 - Extended Lights Out(枚举 | 高斯消元)
题目链接:uva 1560 - Extended Lights Out 题目大意:给定一个5∗6的矩阵,每一个位置上有一个灯和开关,初始矩阵表示灯的亮暗情况,假设按了这个位置的开关,将会导致周围包含自 ...
- uva 10808 - Rational Resistors(基尔霍夫定律+高斯消元)
题目链接:uva 10808 - Rational Resistors 题目大意:给出一个博阿含n个节点,m条导线的电阻网络,求节点a和b之间的等效电阻. 解题思路:基尔霍夫定律,不论什么一点的电流向 ...
- UVA 1397 - The Teacher's Side of Math(高斯消元)
UVA 1397 - The Teacher's Side of Math 题目链接 题意:给定一个x=a1/m+b1/n.求原方程组 思路:因为m*n最多20,全部最高项仅仅有20.然后能够把每一个 ...
随机推荐
- Alluxio 内存存储系统部署
一.文件下载和解压 1)下载地址:http://www.alluxio.org/download 2) 解压命令如下: $ wget http://alluxio.org/downloads/file ...
- JQuery中eq()和get()的区别
众所周知,eq()方法返回的是一个JQuery对象,也就是[object Object]; get()方法返回的是DOM对象组成的数组,也就是[object HTMLLIElement]; 我们用一个 ...
- 【Maven】maven打包生成可执行jar文件
http://blog.csdn.net/u013177446/article/details/53944424 ******************************************* ...
- Java web项目中java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
原来是tomcat找不到MYSQL JAR包的问题.后来又把mysql-connector-java-5.1.7-bin.jar导入到tomcat的lib目录下面就ok了,嘿…… 在java项目中,只 ...
- 纯绿色 jsonUtil工具
package com.daditech.common.util; import java.lang.reflect.Field; import java.lang.reflect.Method; i ...
- Java调用存储过程小结
学生在学习jdbc的时候,会问到怎么调用存储过程,现在将java调用oracle存储过程的示例总结如下.(关于调用sqlserver的存储过程将在下次进行小结请关注) 一:无返回值的存储过程 存储过程 ...
- 【ExtJS】各种获取元素组件方法
1.get().getDom().getCmp().getBody().getDoc(): get(id/obj): get方法用来得到一个Ext元素,也就是类型为Ext.Element的对象, Ex ...
- linux查找系统中占用磁盘空间最大的文件
Q:下午有一客户磁盘空间占用很大,使用df查看磁盘剩余空间很小了,客户想知道是哪些文件占满了文件. Q1:在Linux下如何查看系统占用磁盘空间最大的文件? Q2:在Linux下如何让文件夹下的文件让 ...
- Linux下安装Redmine(项目管理软件)
前置条件需要安装 ruby,rubygems,rake,rails和mysql数据库. 安装Redmine 和 Ruby.Rails对应的版本: Redmine version Supported R ...
- [LintCode]计算两个数的交集(二)
问题分析: 用两个指针分别遍历即可. 问题求解: public class Solution { /** * @param nums1 an integer array * @param nums2 ...