UVA 11542 高斯消元
从数组中选择几个数,要求他们的乘积可以开平方,问有多少种方案。
先将单个数拆分成质因子,对于这个数而言,那些指数为奇数的质因子会使这个数无法被开平方。
所以我们需要选择一个对应质因子指数为奇数的元素,将他们两个放在一个方案中,但是又有可能会引入其他的质因子。
这样就变成了求解行列式中自由变元的数量问题。
将数组转换成行列式,利用高斯消元求解。
代码如下:
#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 高斯消元的更多相关文章
- UVa 11542 (高斯消元 异或方程组) Square
书上分析的太清楚,我都懒得写题解了.=_=|| #include <cstdio> #include <cstring> #include <cmath> #inc ...
- uva 10828 高斯消元求数学期望
Back to Kernighan-RitchieInput: Standard Input Output: Standard Output You must have heard the name ...
- UVA 11542 - Square(高斯消元)
UVA 11542 - Square 题目链接 题意:给定一些数字.保证这些数字质因子不会超过500,求这些数字中选出几个,乘积为全然平方数,问有几种选法 思路:对每一个数字分解成质因子后.发现假设要 ...
- UVa 11542 Square (高斯消元)
题意:给定 n 个数,从中选出一个,或者是多个,使得选出的整数的乘积是完全平方数,求一共有多少种选法,整数的素因子不大于 500. 析:从题目素因子不超过 500,就知道要把每个数进行分解.因为结果要 ...
- 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.然后能够把每一个 ...
- UVA 1564 - Widget Factory(高斯消元)
UVA 1564 - Widget Factory 题目链接 题意:n种零件, 给定m个制作时间.每段时间制作k个零件,每种零件有一个制作时间,每段时间用Mon到Sun表示,求每一个零件的制作时间.还 ...
随机推荐
- Web | ES6的异步编程
js对于异步操作有三个解决方案,分别是Promise,generator,async/await. 下面分别说说这三种方案的一些基础. Promise promise对象用于表示一个异步操作的最终状态 ...
- C语言入门学习和整理 1-3
1. int main() { char c = 'A'; printf("c=%c", c); } int main() { ; printf("c=%c", ...
- tp框架如何处理mysql先排序在分组
$giModel = M('GroupIntegral'); $gi_table = $giModel->order('id desc')->limit('999')->buildS ...
- swiper在vue中正确的使用方法
1.安装swiper,执行npm install vue-awesome-swiper --save命令 2.在main.js中添加下面三行 import 'swiper/dist/css/swipe ...
- Windows Redis 取消保护模式C#进行访问
运行redis服务程序和客户端程序设置即可. config set protected-mode “no”
- PHP 好用第三方库
PHP 好用第三方库 whoops 更好的php错误报告库 [github]:https://github.com/filp/whoops Whoops是一个易于处理和调试错误的PHP库 .它提供基于 ...
- 树莓派3B+学习笔记:10、使用SSH连接树莓派
SSH(Secure Shell)是一种能够以安全的方式提供远程登录的协议,也是目前远程管理Linux系统的首选方式. 1.开启树莓派3B+的SSH远程管理功能,在终端中输入以下命令: sudo ra ...
- 利用wireshark抓取TCP的整个过程分析。
原文地址:https://www.cnblogs.com/NickQ/p/9226579.html 最近,已经很久都没有更新博客了.看看时间,想想自己做了哪些事情,突然发现自己真的是太贪心,到头来却一 ...
- Python 装饰器装饰类中的方法(转)
def catch_exception(origin_func): def wrapper(self, *args, **kwargs): try: u = origin_func(self, *ar ...
- python教程(三)·函数进阶(下)
下半部分果然很快到来,这次介绍函数的更高级用法,装饰器! 函数嵌套 先来说说函数嵌套,python中的函数是可以嵌套的,也就是说可以将一个函数放在另一个函数里面,比如: >>> de ...